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 |