Share via


<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

bad_function_call

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.

binary_negate

Eine Klasse, mit der eine Memberfunktion bereitgestellt wird, die den Rückgabewert einer angegebenen binären Funktion negiert.

binder1st

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.

binder2nd

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.

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.

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.

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.

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.

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 einer non_const-Memberfunktion, die keine Argumente akzeptiert, ermöglicht, als unäres Funktionsobjekt aufgerufen zu werden, wenn sie mit einem Verweisargument initialisiert wird.

mem_fun_t

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.

mem_fun1_ref_t

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.

mem_fun1_t

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.

pointer_to_binary_function

Konvertiert einen binären Funktionszeiger in eine anwendbare binäre Funktion.

pointer_to_unary_function

Konvertiert einen unären Funktionszeiger in eine anwendbare unäre Funktion.

reference_wrapper

Eine Klasse, die einen Verweis umschließt.

result_of

Eine Struktur, die den Rückgabetyp eines umschlossenen aufrufbaren Objekts enthält.

unary_negate

Eine Klasse, mit der eine Memberfunktion bereitgestellt wird, die den Rückgabewert einer angegebenen unären Funktion negiert.

Funktionen

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.

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.

bit_and

Gibt das bitweise logische UND (binärer Operator&) der zwei Parameter zurück.

bit_not

Gibt das bitweise logische Komplement (operator~) des Parameters zurück.

bit_or

Gibt das bitweise logische ODER (binärer Operator|) der zwei Parameter zurück.

bit_xor

Gibt das bitweise logische XOR (Operator^) der zwei Parameter zurück.

cref

Erstellt ein konstantes reference_wrapper-Element aus einem Argument.

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.

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.

not2

Gibt das Komplement eines binären Prädikats zurück.

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.

ref

Konstruiert ein reference_wrapper aus einem Argument.

swap

Tauscht zwei function-Objekte.

Strukturen

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.

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ärer 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ärer 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ärer 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.

modulus

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ärer 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.

Objekte

_1.._M

Platzhalter für austauschbare Argumente.

Operatoren

operator==

Lässt den Gleichheitsvergleich von aufrufbaren Objekten nicht zu.

operator!=

Lässt den Ungleichheitsvergleich von aufrufbaren Objekten nicht zu.

Siehe auch

Referenz

Threadsicherheit in der C++-Standardbibliothek

Standardvorlagenbibliothek

Weitere Ressourcen

<functional> Member

Headerdateien der C++-Standardbibliothek