<functional>

Definiert C++-Standardbibliotheksfunktionen, mit denen Funktionsobjekte erstellt werden können, auch als Functors bezeichnet, und deren Ordner. Ein Funktionsobjekt ist ein Objekt eines Typs, der operator() definiert. Ein Funktionsobjekt kann ein Funktionszeiger sein, aber in der Regel, wird das Objekt zum Speichern zusätzlicher Informationen verwendet, auf die während eines Funktionsaufrufs zugegriffen werden kann.

Anforderungen

Header:<functional>

Namespace: std

Hinweise

Algorithmen erfordern zwei Arten von Funktionsobjekten: unär und binär. Für unäre Funktionsobjekte ist ein Argument und für binäre Funktionsobjekte sind zwei Argumente erforderlich. Ein Funktionsobjekt und Funktionszeiger können einem Algorithmus als Prädikat übergeben werden; Funktionsobjekte sind allerdings auch anwendbar und erweitern den Bereich, die Flexibilität und die Effizienz der C++-Standardbibliothek. Wenn beispielsweise ein Wert, der benötigt wurde, an eine Funktion gebunden, bevor an einem Algorithmus, dann ein Funktionszeiger übergeben wurde, nicht verwendet werden kann. Funktionsadapter konvertieren Funktionszeiger in anwendbare Funktionsobjekte, die an einen Wert gebunden werden können. Die Headerfunktion <> enthält auch Memberfunktionsadapter, mit denen Memberfunktionen als anpassbare Funktionsobjekte aufgerufen werden können. Funktionen sind anwendbar, wenn sie über geschachtelte Typdeklarationen verfügen, die die Argument- und Rückgabetypen angeben. Funktionsobjekte und Adapter ermöglichen es der C++-Standardbibliothek, bestehende Anwendungen zu aktualisieren, und helfen bei der Integration der Bibliothek in die C++-Programmierumgebung.

Die Implementierung der Funktionsobjekte in <funktional> umfasst transparente Operator-Functoren, die Spezialisierungen von Standardfunktionsobjekten sind und keine Vorlagenparameter übernehmen und eine perfekte Weiterleitung der Funktionsargumente und eine perfekte Rückgabe des Ergebnisses durchführen. Für diese Vorlagenspezialisierungen müssen keine Argumenttypen angeben werden, wenn arithmetische, bitweise sowie Vergleichs- und Logikoperatorfunktionselemente aufgerufen werden. Sie können arithmetische, bitweise sowie Vergleichs- und Logikoperatoren für eigene Typen überladen oder für heterogene Typkombinationen und die transparenten Operatorfunktionselemente dann als Funktionsargumente verwenden. Wenn Ihr Typ MyType z.B. operator< implementiert, können Sie sort(my_collection.begin(), my_collection.end(), less<>()) aufrufen, anstatt explizit den Typ sort(my_collection.begin(), my_collection.end(), less<MyType>()) anzugeben.

Die folgenden Features werden in C++11, C++14 und C++17 hinzugefügt:

  • Eine Aufrufsignatur ist der Name eines Rückgabetyps, gefolgt von einer durch Trennzeichen getrennten Liste in Klammern von keinem oder mehr Argumenttypen.

  • Ein aufrufbarer Typ ist entweder ein Zeiger auf eine Funktion, ein Zeiger auf eine Memberfunktion, ein Zeiger auf Memberdaten oder ein class-Typ, dessen Objekte unmittelbar links neben einem Funktionsaufrufoperators angezeigt werden können.

  • Ein aufrufbares Objekt ist das Objekt eines aufrufbaren Typs.

  • Ein Aufrufwrappertyp ist ein Typ, der ein aufrufbares Objekt enthält und einen Aufrufvorgang unterstützt, der dieses Objekt weiterleitet.

  • Ein Aufrufwrapper ist das Objekt eines Aufrufwrappertyps.

  • Ein Zielobjekt ist das aufrufbare Objekt, das in einem Aufrufwrapperobjekt enthalten ist.

Die Pseudofunktion INVOKE(f, t1, t2, ..., tN) bedeutet eine der folgenden Aktionen:

  • (t1.*f)(t2, ..., tN), wenn f ein Zeiger auf eine Memberfunktion der Klasse T und t1 ist, ist ein Objekt vom Typ T oder ein Verweis auf ein Objekt vom Typ T oder ein Verweis auf ein Objekt eines Typs, der von T abgeleitet wird.

  • ((*t1).*f)(t2, ..., tN), wenn f ein Zeiger auf eine Memberfunktion der Klasse T ist, und t1 keinem der Typen entspricht, die im vorherigen Element beschrieben werden.

  • t1.*f, wenn N == 1 und f ein Zeiger auf Memberdaten einer Klasse T und t1 ist, ist ein Objekt vom Typ T oder ein Verweis auf ein Objekt vom Typ T oder ein Verweis auf ein Objekt eines Typs, der von T abgeleitet wird.

  • (*t1).*f, wenn N == 1 und f ein Zeiger auf Memberdaten einer Klasse T ist, und t1 keinem der Typen entspricht, die im vorherigen Element beschrieben werden.

  • In allen anderen Fällen f(t1, t2, ..., tN).

Die Pseudofunktion INVOKE(f, t1, t2, ..., tN, R) bedeutet, dass INVOKE(f, t1, t2, ..., tN) implizit in R konvertiert wird.

Wenn ein Aufrufwrapper über einen schwachen Ergebnistyp verfügt, basiert der Typ des Membertyps result_type wie folgt auf dem Typ T des Zielobjekts des Wrappers:

  • Wenn T ein Zeiger auf eine Funktion ist, ist result_type ein Synonym für den Rückgabetyp von T.

  • Wenn T ein Zeiger auf eine Memberfunktion ist, ist result_type ein Synonym für den Rückgabetyp von T.

  • Wenn T ein Klassentyp ist, der einen Membertyp result_type aufweist, dann ist result_type ein Synonym für T::result_type.

  • Andernfalls gibt es kein Member result_type.

Jeder Aufrufwrapper weist einen Verschiebekonstruktor und einen Kopierkonstruktor auf. Ein einfacher Aufrufwrapper ist ein Aufrufwrapper, der über einen Zuweisungsoperator verfügt und dessen Kopierkonstruktor, Verschiebekonstruktor und Zuweisungsoperator keine Ausnahmen auslösen. Ein Aufrufweiterleitungwrapper ist ein Aufrufwrapper, der mithilfe einer beliebigen Argumentliste aufgerufen werden kann, und der die Argumente den umschlossenen aufrufbaren Objekt als Verweise liefert. Alle rvalue-Argumente werden als rvalue-Verweise geliefert, und lvalue-Argumente werden als lvalue-Verweise geliefert.

Member

Klassen

name Beschreibung
bad_function_call Eine Klasse, mit der eine Ausnahme beschrieben wird, die ausgelöst wird, um anzugeben, dass ein Aufruf von operator() an ein function-Objekt einen Fehler verursacht hat, da das Objekt leer war.
binary_negate Eine Klassenvorlage, die eine Memberfunktion bereitstellt, die den Rückgabewert einer angegebenen binären Funktion negiert.
(Veraltet in C++17.)
binder1st Eine Klassenvorlage, die einen Konstruktor bereitstellt, der ein binäres Funktionsobjekt in ein unäres Funktionsobjekt konvertiert, indem das erste Argument der binären Funktion an einen angegebenen Wert gebunden wird.
(Veraltet in C++11, entfernt in C++17.)
binder2nd Eine Klassenvorlage, die einen Konstruktor bereitstellt, der ein binäres Funktionsobjekt in ein unäres Funktionsobjekt konvertiert, indem das zweite Argument der Binären Funktion an einen angegebenen Wert gebunden wird.
(Veraltet in C++11, entfernt in C++17.)
boyer_moore_horspool_searcher
boyer_moore_searcher
const_mem_fun_ref_t Eine Adapterklasse, die einer const-Memberfunktion, die keine Argumente akzeptiert, ermöglicht, als unäres Funktionsobjekt aufgerufen zu werden, wenn sie mit einem Verweisargument initialisiert wird.
(Veraltet in C++11, entfernt in C++17.)
const_mem_fun_t Eine Adapterklasse, die einer const-Memberfunktion, die keine Argumente akzeptiert, ermöglicht, als unäres Funktionsobjekt aufgerufen zu werden, wenn sie mit einem Zeigerargument initialisiert wird.
(Veraltet in C++11, entfernt in C++17.)
const_mem_fun1_ref_t Eine Adapterklasse, die einer const-Memberfunktion, die ein einzelnes Argument akzeptiert, ermöglicht, als binäres Funktionsobjekt aufgerufen zu werden, wenn sie mit einem Verweisargument initialisiert wird.
(Veraltet in C++11, entfernt in C++17.)
const_mem_fun1_t Eine Adapterklasse, die einer const-Memberfunktion, die ein einzelnes Argument akzeptiert, ermöglicht, als binäres Funktionsobjekt aufgerufen zu werden, wenn sie mit einem Zeigerargument initialisiert wird.
(Veraltet in C++11, entfernt in C++17.)
default_searcher
function Eine Klasse, die ein aufrufbares Objekt umschließt.
hash Eine Klasse, die einen Hashcode für einen Wert berechnet.
is_bind_expression Eine Klasse, die überprüft, ob ein bestimmter Typ generiert wird, indem bind aufgerufen wird.
is_placeholder Eine Klasse, die überprüft, ob ein bestimmter Typ ein Platzhalter ist.
mem_fun_ref_t Eine Adapterklasse, die es einer non_const Memberfunktion ermöglicht, die keine Argumente als unäres Funktionsobjekt aufruft, wenn sie mit einem Verweisargument initialisiert wird.
(Veraltet in C++11, entfernt in C++17.)
mem_fun_t Eine Adapterklasse, mit der eine non_const Memberfunktion ohne Argumente aufgerufen werden kann, wenn sie mit einem Zeigerargument initialisiert werden.
(Veraltet in C++11, entfernt in C++17.)
mem_fun1_ref_t Eine Adapterklasse, die es einer non_const Memberfunktion ermöglicht, die ein einzelnes Argument als binäres Funktionsobjekt aufruft, wenn sie mit einem Verweisargument initialisiert wird.
(Veraltet in C++11, entfernt in C++17.)
mem_fun1_t Eine Adapterklasse, die es einer non_const Memberfunktion ermöglicht, die ein einzelnes Argument als binäres Funktionsobjekt aufruft, wenn sie mit einem Zeigerargument initialisiert wird.
(Veraltet in C++11, entfernt in C++17.)
pointer_to_binary_function Konvertiert einen binären Funktionszeiger in eine anwendbare binäre Funktion.
(Veraltet in C++11, entfernt in C++17.)
pointer_to_unary_function Konvertiert einen unären Funktionszeiger in eine anwendbare unäre Funktion.
(Veraltet in C++11, entfernt in C++17.)
reference_wrapper Eine Klasse, die einen Verweis umschließt.
unary_negate Eine Klassenvorlage, die eine Memberfunktion bereitstellt, die den Rückgabewert einer angegebenen unären Funktion negiert.
(Veraltet in C++17.)

Functions

Name Beschreibung
bind Bindet Argumente an ein aufrufbares Objekt.
bind1st Eine Hilfevorlagenfunktion, mit der ein Adapter erstellt wird, um ein binäres Funktionsobjekt in ein unäres Funktionsobjekt zu konvertieren, indem das erste Argument der binären Funktion an einen angegebenen Wert gebunden wird.
(Veraltet in C++11, entfernt in C++17.)
bind2nd Eine Hilfevorlagenfunktion, mit der ein Adapter erstellt wird, um ein binäres Funktionsobjekt in ein unäres Funktionsobjekt zu konvertieren, indem das zweite Argument der binären Funktion an einen angegebenen Wert gebunden wird.
(Veraltet in C++11, entfernt in C++17.)
bit_and Gibt bitweise UND (binär operator&) der beiden Parameter zurück.
bit_not Gibt die bitweise Ergänzung (operator~) des Parameters zurück.
(In C++14 hinzugefügt.)
bit_or Gibt den bitweisen OR (operator|) der beiden Parameter zurück.
bit_xor Gibt den bitweisen XOR (operator^) der beiden Parameter zurück.
cref Erstellt ein konstantes reference_wrapper-Element aus einem Argument.
invoke
mem_fn Generiert einen einfachen Aufrufwrapper.
mem_fun Hilfevorlagenfunktionen, die verwendet werden, um Funktionsobjektadapter für Memberfunktionen zu konstruieren, wenn Sie mit Zeigerargumenten initialisiert werden.
(Veraltet in C++11, entfernt in C++17.)
mem_fun_ref Eine Hilfevorlagenfunktion, die verwendet wird, um Funktionsobjektadapter für Memberfunktionen zu konstruieren, wenn Sie mit Verweisargumenten initialisiert wird.
not1 Gibt das Komplement eines unären Prädikats zurück.
(Veraltet in C++17.)
not2 Gibt das Komplement eines binären Prädikats zurück.
(Veraltet in C++17.)
not_fn Gibt die Ergänzung des Ergebnisses des Funktionsobjekts zurück.
(In C++17 hinzugefügt.)
ptr_fun Eine Hilfevorlagenfunktion, die verwendet wird, um die jeweiligen unären und binären Funktionszeiger in die unären und binären anwendbaren Funktionen zu konvertieren.
(Veraltet in C++11, entfernt in C++17.)
ref Konstruiert ein reference_wrapper aus einem Argument.
swap Tauscht zwei function-Objekte.

Strukturen

Name Beschreibung
binary_function Eine leere Basisklasse, mit der Typen definiert werden, die möglicherweise von einer abgeleiteten Klasse geerbt wird, die ein binäres Funktionsobjekt bereitstellt.
(Veraltet in C++11, entfernt in C++17.)
divides Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation der Unterteilung für Elemente eines angegebenen Werttyps ausführt.
equal_to Ein binäres Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs gleich einem anderen Wert dieses Typs ist.
greater Ein binärer Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs größer als ein anderer Wert dieses Typs ist.
greater_equal Ein binärer Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs größer oder gleich einem anderen Wert dieses Typs ist.
less Ein binäres Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs kleiner oder gleich einem anderen Wert dieses Typs ist.
less_equal Ein binäres Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs kleiner als ein anderer Wert dieses Typs ist.
logical_and Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, mit dem die logische Operation der Konjunktion für Elemente eines angegebenen Werttyps ausgeführt und die Wahrheit oder Falschheit des Ergebnisses getestet wird.
logical_not Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, mit dem die logische Operation der Negation für Elemente eines angegebenen Werttyps ausgeführt und die Wahrheit oder Falschheit des Ergebnisses getestet wird.
logical_or Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, mit dem die logische Operation der Disjunktion für Elemente eines angegebenen Werttyps ausgeführt und die Wahrheit oder Falschheit des Ergebnisses getestet wird.
minus Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation der Subtraktion für Elemente eines angegebenen Werttyps ausführt.
Modulo Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation des Modulus für Elemente eines angegebenen Werttyps ausführt.
multiplies Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation der Multiplikation für Elemente eines angegebenen Werttyps ausführt.
negate Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, mit dem der negative Bereich eines Elementwerts zurückgegeben wird.
not_equal_to Ein binäres Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs ungleich einem anderen Wert dieses Typs ist.
plus Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation der Addition für Elemente eines angegebenen Werttyps ausführt.
unary_function Eine leere Basisklasse, mit der Typen definiert werden, die möglicherweise von einer abgeleiteten Klasse geerbt wird, die ein unäres Funktionsobjekt bereitstellt.
(Veraltet in C++11, entfernt in C++17.)

Objekte

Name Beschreibung
_1.._M Platzhalter für austauschbare Argumente.

Operatoren

Name Beschreibung
operator== Lässt den Gleichheitsvergleich von aufrufbaren Objekten nicht zu.
operator!= Lässt den Ungleichheitsvergleich von aufrufbaren Objekten nicht zu.

Siehe auch

Headerdateienreferenz
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz