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 |