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