<functional>
Definiert Standardbibliotheksfunktionen, die dabei helfen, Funktionsobjekte (auch als Funktionselemente bekannt) und die Sammelmappe zu erstellen. 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.
#include <functional>
Hinweise
Algorithmen erfordern zwei Typen 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 erhöhen den Bereich, die Flexibilität und die Effizienz des STL. 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. Im Header <functional> sind auch Memberfunktionsadapter enthalten, die es ermöglichen, dass Memberfunktionen als anwendbare Funktionsobjekte aufgerufen werden. Funktionen sind anwendbar, wenn sie über geschachtelte Typdeklarationen verfügen, die die Argument- und Rückgabetypen angeben. Der C++-Standard erfordert, dass diese Anwendbarkeit implementiert wird, indem alle Standardobjektklassen von den "unary_function"- oder "binary_function"-Basisklassen erben. Funktionsobjekte und Adapter ermöglichen STL bestehende Anwendungen zu aktualisieren und helfen bei der Integration von STL in die C++-Programmierumgebung.
Die Visual C++-Implementierung der Funktionsobjekte in <functional> umfasst transparente Operatorfunktionselemente, die Spezialisierungen von Standardfunktionsobjekten sind, keine Vorlagenparameter akzeptieren und für eine perfekte Weiterleitung der Funktionsargumente und eine perfekte Rückgabe der Ergebnisse sorgen. Diese Funktion ist Teil der Spezifikation des Normenentwurfs C++14. 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 der 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.
C++11/C++14-Implementierung
Die folgenden Features werden in der Visual C++-Implementierung von C++11/C++14 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 ein Zeiger auf eine Funktion, ein Zeiger auf eine Memberfunktion, ein Zeiger auf Memberdaten oder ein Klassentyp, dessen Objekte unmittelbar links neben eines 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 Weiterleitungsaufrufwrapper 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.
Klassen
Eine Klasse, mit der eine Ausnahme beschrieben wird, die ausgelöst wird, um anzugeben, dass operator() auf einem -Funktionsobjekt einen Fehler verursacht hat, da das Objekt leer war. |
|
Eine Klasse, mit der eine Memberfunktion bereitgestellt wird, die den Rückgabewert einer angegebenen binären Funktion negiert. |
|
Eine Vorlagenklasse, mit der ein Konstruktor bereitgestellt wird, 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. |
|
Eine Vorlagenklasse, mit der ein Konstruktor bereitgestellt wird, 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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
Eine Klasse, die ein aufrufbares Objekt umschließt. |
|
Eine Klasse, die einen Hashcode für einen Wert berechnet. |
|
Eine Klasse, die überprüft, ob ein bestimmter Typ generiert wird, indem bind aufgerufen wird. |
|
Eine Klasse, die überprüft, ob ein bestimmter Typ ein Platzhalter ist. |
|
Eine Adapterklasse, die einer non_const-Memberfunktion, die keine Argumente akzeptiert, ermöglicht, als unäres Funktionsobjekt aufgerufen zu werden, wenn sie mit einem Verweisargument initialisiert wird. |
|
Eine Adapterklasse, die einer non_const-Memberfunktion, die keine Argumente akzeptiert, ermöglicht, als unäres Funktionsobjekt aufgerufen zu werden, wenn sie mit einem Zeigerargument initialisiert wird. |
|
Eine Adapterklasse, die einer non_const-Memberfunktion, die ein einzelnes Argument akzeptiert, ermöglicht, als binäres Funktionsobjekt aufgerufen zu werden, wenn sie mit einem Verweisargument initialisiert wird. |
|
Eine Adapterklasse, die einer non_const-Memberfunktion, die ein einzelnes Argument akzeptiert, ermöglicht, als binäres Funktionsobjekt aufgerufen zu werden, wenn sie mit einem Zeigerargument initialisiert wird. |
|
Konvertiert einen binären Funktionszeiger in eine anwendbare binäre Funktion. |
|
Konvertiert einen unären Funktionszeiger in eine anwendbare unäre Funktion. |
|
Eine Klasse, die einen Verweis umschließt. |
|
Eine Struktur, die den Rückgabetyp eines umschlossenen aufrufbaren Objekts enthält. |
|
Eine Klasse, mit der eine Memberfunktion bereitgestellt wird, die den Rückgabewert einer angegebenen unären Funktion negiert. |
Funktionen
Bindet Argumente an ein aufrufbares Objekt. |
|
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. |
|
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. |
|
Gibt das bitweise logische UND (binärer Operator&) der zwei Parameter zurück. |
|
Gibt das bitweise logische Komplement (operator~) des Parameters zurück. |
|
Gibt das bitweise logische ODER (binärer Operator|) der zwei Parameter zurück. |
|
Gibt das bitweise logische XOR (Operator^) der zwei Parameter zurück. |
|
Erstellt ein konstantes reference_wrapper-Element aus einem Argument. |
|
Generiert einen einfachen Aufrufwrapper. |
|
Hilfevorlagenfunktionen, die verwendet werden, um Funktionsobjektadapter für Memberfunktionen zu konstruieren, wenn Sie mit Zeigerargumenten initialisiert werden. |
|
Eine Hilfevorlagenfunktion, die verwendet wird, um Funktionsobjektadapter für Memberfunktionen zu konstruieren, wenn Sie mit Verweisargumenten initialisiert wird. |
|
Gibt das Komplement eines unären Prädikats zurück. |
|
Gibt das Komplement eines binären Prädikats zurück. |
|
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. |
|
Konstruiert ein reference_wrapper aus einem Argument. |
|
Tauscht zwei function-Objekte. |
Strukturen
Eine leere Basisklasse, mit der Typen definiert werden, die möglicherweise von einer abgeleiteten Klasse geerbt wird, die ein binäres Funktionsobjekt bereitstellt. |
|
Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation der Unterteilung für Elemente eines angegebenen Werttyps ausführt. |
|
Ein binärer Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs gleich einem anderen Wert dieses Typs ist. |
|
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. |
|
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. |
|
Ein binärer Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs kleiner oder gleich einem anderen Wert dieses Typs ist. |
|
Ein binärer Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs kleiner als ein anderer Wert dieses Typs ist. |
|
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. |
|
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. |
|
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. |
|
Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation der Subtraktion für Elemente eines angegebenen Werttyps ausführt. |
|
Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation des Modulus für Elemente eines angegebenen Werttyps ausführt. |
|
Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation der Multiplikation für Elemente eines angegebenen Werttyps ausführt. |
|
Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, mit dem der negative Bereich eines Elementwerts zurückgegeben wird. |
|
Ein binärer Prädikat, mit dem überprüft wird, ob der Wert eines bestimmten Typs ungleich einem anderen Wert dieses Typs ist. |
|
Die Klasse stellt ein vordefiniertes Funktionsobjekt bereit, das die arithmetische Operation der Addition für Elemente eines angegebenen Werttyps ausführt. |
|
Eine leere Basisklasse, mit der Typen definiert werden, die möglicherweise von einer abgeleiteten Klasse geerbt wird, die ein unäres Funktionsobjekt bereitstellt. |
Objekte
Platzhalter für austauschbare Argumente. |
Operatoren
Lässt den Gleichheitsvergleich von aufrufbaren Objekten nicht zu. |
|
Lässt den Ungleichheitsvergleich von aufrufbaren Objekten nicht zu. |
Siehe auch
Referenz
Threadsicherheit in der C++-Standardbibliothek