C ++ Kitaplığı - <işlevsel>

Giriş

İşlev nesneleri, işlevlere benzer bir sözdizimi ile kullanılmak üzere özel olarak tasarlanmış nesnelerdir. Std :: işlevinin örnekleri, herhangi bir Çağrılabilir hedef - işlevleri, lambda ifadelerini, bağlama ifadelerini veya diğer işlev nesnelerini ve ayrıca üye işlevlere işaretçileri ve veri üyelerine işaretçileri depolayabilir, kopyalayabilir ve çağırabilir.

Beyanname

Aşağıda std :: function için bildirim verilmiştir.

template<class >
class function;

C ++ 11

template< class R, class... Args >
class function<R(Args...)>

Parametreler

  • R - sonuç_türü.

  • argument_type - T if sizeof ... (Args) == 1 ve T Args'deki ilk ve tek türdür.

Misal

Aşağıdaki örnekte std :: function için.

#include <functional>
#include <iostream>

struct Foo {
   Foo(int num) : num_(num) {}
   void print_add(int i) const { std::cout << num_+i << '\n'; }
   int num_;
};
 
void print_num(int i) {
   std::cout << i << '\n';
}

struct PrintNum {
   void operator()(int i) const {
      std::cout << i << '\n';
   }
};

int main() {
   std::function<void(int)> f_display = print_num;
   f_display(-9);

   std::function<void()> f_display_42 = []() { print_num(42); };
   f_display_42();

   std::function<void()> f_display_31337 = std::bind(print_num, 31337);
   f_display_31337();

   std::function<void(const Foo&, int)> f_add_display = &Foo::print_add;
   const Foo foo(314159);
   f_add_display(foo, 1);

   std::function<int(Foo const&)> f_num = &Foo::num_;
   std::cout << "num_: " << f_num(foo) << '\n';

   using std::placeholders::_1;
   std::function<void(int)> f_add_display2= std::bind( &Foo::print_add, foo, _1 );
   f_add_display2(2);
 
   std::function<void(int)> f_add_display3= std::bind( &Foo::print_add, &foo, _1 );
   f_add_display3(3);

   std::function<void(int)> f_display_obj = PrintNum();
   f_display_obj(18);
}

Örnek çıktı şu şekilde olmalıdır -

-9
42
31337
314160
num_: 314159
314161
314162
18

Üye fonksiyonları

Sr.No. Üye fonksiyonları Tanım
1 (kurucu) Yeni bir std :: function örneği oluşturmak için kullanılır
2 (yıkıcı) Bir std :: function örneğini yok etmek için kullanılır
3 operatör = Yeni bir hedef atamak için kullanılır
4 takas İçeriği değiştirmek için kullanılır
5 atamak Yeni bir hedef atamak için kullanılır
6 operatör bool Geçerli bir hedefin bulunup bulunmadığını kontrol etmek için kullanılır
7 Şebeke() Hedefi çağırmak için kullanılır

Üye olmayan işlevler

Sr.No. Üye olmayan işlevler Tanım
1 std :: takas Std :: swap algoritmasında uzmanlaşmıştır
2 operatör == operatör! = Std :: işlevini nullptr ile karşılaştırır.

Operatör sınıfları

Sr.No. Operatör sınıfları Tanım
1 bit_and Bitsel bir AND işlevi nesne sınıfıdır
2 bit_or Bitsel OR işlevi nesne sınıfıdır
3 bit_xor Bitsel bir XOR işlevi nesne sınıfıdır
3 böler Bu bir bölme işlevi nesne sınıfıdır
4 eşittir Eşitlik karşılaştırması için bir işlev nesnesi sınıfıdır
5 daha büyük Eşitsizlikten daha büyük karşılaştırması için bir işlev nesnesi sınıfıdır
6 great_equal Karşılaştırma için büyük veya eşittir bir işlev nesnesi sınıfıdır
7 az Eşitsizlikten daha az karşılaştırması için bir işlev nesnesi sınıfıdır
8 less_equal Karşılaştırma için küçük veya eşittir bir işlev nesnesi sınıfıdır
9 mantıksal_ve Mantıksal bir AND işlevi nesne sınıfıdır
10 mantıksal_ değil Bu mantıksal bir NOT işlevi nesne sınıfıdır
11 mantıksal_veya Mantıksal bir OR işlevi nesne sınıfıdır
12 eksi Çıkarma işlevi nesne sınıfıdır
13 modül Bu bir modül fonksiyon nesnesi sınıfıdır
14 çoğalır Bu bir çarpma işlevi nesne sınıfıdır
15 olumsuzlamak Negatif bir fonksiyon nesnesi sınıfıdır
16 eşit değil Eşitlik dışı karşılaştırma için bir işlev nesnesi sınıfıdır
17 artı Bu bir ek fonksiyon nesnesi sınıfıdır