Biblioteka C ++ - <funkcjonalne>

Wprowadzenie

Obiekty funkcyjne są obiektami zaprojektowanymi specjalnie do używania z podobną składnią do funkcji. Wystąpienia std :: function mogą przechowywać, kopiować i wywoływać dowolne wywoływalne funkcje docelowe, wyrażenia lambda, wyrażenia wiązania lub inne obiekty funkcyjne, a także wskaźniki do funkcji składowych i wskaźniki do składowych danych.

Deklaracja

Poniżej znajduje się deklaracja dla std :: function.

template<class >
class function;

C ++ 11

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

Parametry

  • R - typ_wyniku.

  • argument_type - T jeśli sizeof ... (Args) == 1, a T jest pierwszym i jedynym, wpisz Args.

Przykład

W poniższym przykładzie dla std :: function.

#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);
}

Przykładowe wyjście powinno wyglądać następująco:

-9
42
31337
314160
num_: 314159
314161
314162
18

Funkcje składowe

Sr.No. Funkcje składowe Definicja
1 (konstruktor) Służy do konstruowania nowej instancji std :: function
2 (burzyciel) Służy do niszczenia instancji std :: function
3 operator = Służy do przypisania nowego celu
4 zamiana Służy do zamiany zawartości
5 przydzielać Służy do przypisania nowego celu
6 operator bool Służy do sprawdzania, czy zawiera prawidłowy cel
7 operator() Służy do wywołania celu

Funkcje niebędące członkami

Sr.No. Funkcje niebędące członkami Definicja
1 std :: swap Specjalizuje się w algorytmie std :: swap
2 operator == operator! = Porównuje funkcję std :: z nullptr

Klasy operatorów

Sr.No. Klasy operatorów Definicja
1 bit_and Jest to klasa obiektu funkcji bitowej AND
2 bit_or Jest to klasa obiektu funkcji typu OR
3 bit_xor Jest to bitowa klasa obiektu funkcji XOR
3 dzieli Jest to klasa obiektu funkcji podziału
4 równy Jest to klasa obiektów funkcji do porównywania równości
5 większy Jest to klasa obiektu funkcji do porównywania nierówności typu „większe niż”
6 większe_ równe Jest to klasa obiektów funkcji służąca do porównywania typu większy lub równy
7 mniej Jest to klasa obiektów funkcji służąca do porównywania mniejszych niż nierówności
8 less_equal Jest to klasa obiektów funkcji służąca do porównywania mniejszych lub równych
9 logiczne_i Jest to klasa obiektu funkcji logicznej AND
10 logical_not Jest to logiczna klasa obiektów funkcji NIE
11 logiczne_lub Jest to klasa obiektu funkcji logicznej LUB
12 minus Jest to klasa obiektu funkcji odejmowania
13 moduł Jest to klasa obiektowa funkcji modułu
14 mnoży się Jest to klasa obiektu funkcji mnożenia
15 negować Jest to klasa obiektu funkcji ujemnej
16 not_equal_to Jest to klasa obiektu funkcji do porównywania nierówności
17 plus Jest to klasa obiektu funkcji dodawania