C ++ - Bibliothek - <funktional>
Einführung
Funktionsobjekte sind Objekte, die speziell für die Verwendung mit einer Syntax entwickelt wurden, die der von Funktionen ähnelt. Instanzen der Funktion std :: können alle aufrufbaren Zielfunktionen, Lambda-Ausdrücke, Bindungsausdrücke oder andere Funktionsobjekte sowie Zeiger auf Elementfunktionen und Zeiger auf Datenelemente speichern, kopieren und aufrufen.
Erklärung
Es folgt die Deklaration für std :: function.
template<class >
class function;
C ++ 11
template< class R, class... Args >
class function<R(Args...)>
Parameter
R - Ergebnistyp.
argument_type - T wenn sizeof ... (Args) == 1 und T der erste und einzige Typ in Args ist.
Beispiel
Im folgenden Beispiel für 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);
}
Die Beispielausgabe sollte folgendermaßen aussehen:
-9
42
31337
314160
num_: 314159
314161
314162
18
Mitgliedsfunktionen
Sr.Nr. | Mitgliedsfunktionen | Definition |
---|---|---|
1 | (Konstrukteur) | Es wird verwendet, um eine neue std :: function-Instanz zu erstellen |
2 | (Zerstörer) | Es wird verwendet, um eine std :: function-Instanz zu zerstören |
3 | Operator = | Es wird verwendet, um ein neues Ziel zuzuweisen |
4 | Tauschen | Es wird verwendet, um den Inhalt auszutauschen |
5 | zuordnen | Es wird verwendet, um ein neues Ziel zuzuweisen |
6 | Operator Bool | Es wird verwendet, um zu überprüfen, ob ein gültiges Ziel enthalten ist |
7 | Operator() | Es wird verwendet, um das Ziel aufzurufen |
Nichtmitgliedsfunktionen
Sr.Nr. | Nichtmitgliedsfunktionen | Definition |
---|---|---|
1 | std :: swap | Es ist auf den std :: swap-Algorithmus spezialisiert |
2 | operator == operator! = | Es vergleicht eine std :: -Funktion mit nullptr |
Operatorklassen
Sr.Nr. | Operatorklassen | Definition |
---|---|---|
1 | bit_and | Es ist eine bitweise AND-Funktionsobjektklasse |
2 | bit_or | Es ist eine bitweise ODER-Funktionsobjektklasse |
3 | bit_xor | Es ist eine bitweise XOR-Funktionsobjektklasse |
3 | teilt | Es ist eine Teilungsfunktionsobjektklasse |
4 | gleicht | Es ist eine Funktionsobjektklasse für den Gleichheitsvergleich |
5 | größer | Es ist eine Funktionsobjektklasse für einen Vergleich, der größer als die Ungleichung ist |
6 | größer_gleich | Es ist eine Funktionsobjektklasse für einen Vergleich, der größer oder gleich ist |
7 | weniger | Es ist eine Funktionsobjektklasse für einen Vergleich mit weniger als einer Ungleichung |
8 | less_equal | Es ist eine Funktionsobjektklasse für einen Vergleich, der kleiner oder gleich ist |
9 | logisch_und | Es ist eine logische UND-Funktionsobjektklasse |
10 | logisch_nicht | Es ist eine logische NICHT-Funktionsobjektklasse |
11 | logisch_oder | Es ist eine logische ODER-Funktionsobjektklasse |
12 | Minus- | Es ist eine Objektklasse der Subtraktionsfunktion |
13 | Modul | Es ist eine Modulfunktionsobjektklasse |
14 | multipliziert | Es ist eine Multiplikationsfunktionsobjektklasse |
15 | negieren | Es ist eine Objektklasse mit negativer Funktion |
16 | Nicht gleichzusetzen mit | Es ist eine Funktionsobjektklasse für den Vergleich von Ungleichheiten |
17 | Plus | Es ist eine Objektklasse für Zusatzfunktionen |