<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)
, wennf
ein Zeiger auf eine Memberfunktion der KlasseT
undt1
ist, ist ein Objekt vom TypT
oder ein Verweis auf ein Objekt vom TypT
oder ein Verweis auf ein Objekt eines Typs, der vonT
abgeleitet wird.((*t1).*f)(t2, ..., tN)
, wennf
ein Zeiger auf eine Memberfunktion der KlasseT
ist, undt1
keinem der Typen entspricht, die im vorherigen Element beschrieben werden.t1.*f
, wenn N == 1 undf
ein Zeiger auf Memberdaten einer KlasseT
undt1
ist, ist ein Objekt vom TypT
oder ein Verweis auf ein Objekt vom TypT
oder ein Verweis auf ein Objekt eines Typs, der vonT
abgeleitet wird.(*t1).*f
, wenn N == 1 undf
ein Zeiger auf Memberdaten einer KlasseT
ist, undt1
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, istresult_type
ein Synonym für den Rückgabetyp vonT
.Wenn
T
ein Zeiger auf eine Memberfunktion ist, istresult_type
ein Synonym für den Rückgabetyp vonT
.Wenn
T
ein Klassentyp ist, der einen Membertypresult_type
aufweist, dann istresult_type
ein Synonym fürT::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