Function objects
Ein Funktionsobjekt ist jedes Objekt, für welches der Funktionsaufruf-Operator definiert ist. C++ bietet viele eingebaute Funktionsobjekte sowie Unterstützung für die Erstellung und Manipulation neuer Funktionsobjekte.
Inhaltsverzeichnis |
Funktionsaufruf
|
Die ausschließlich darstellende Operation
Der Typ
|
(seit C++11) |
std::invoke
und
std::invoke_r
(seit C++23)
können jedes
Callable
-Objekt mit gegebenen Argumenten gemäß den Regeln von
INVOKE
und
INVOKE<R>
(seit C++23)
aufrufen.
|
(C++17)
(C++23)
|
ruft jedes
Callable
Objekt mit gegebenen Argumenten auf
mit Möglichkeit zur Spezifikation des Rückgabetyps
(seit C++23)
(Funktions-Template) |
Funktionswrapper
Diese polymorphen Wrapper-Klassen bieten Unterstützung für das Speichern beliebiger Funktionsobjekte.
|
(C++11)
|
kopierbarer Wrapper für jedes kopierkonstruierbare aufrufbare Objekt
(Klassen-Template) |
|
(C++23)
|
Nur-verschiebbarer Wrapper für jedes aufrufbare Objekt, das Qualifier in einer gegebenen Aufrufsignatur unterstützt
(Klassen-Template) |
|
(C++26)
|
kopierbarer Wrapper für jedes kopierkonstruierbare aufrufbare Objekt, das Qualifier in einer gegebenen Aufrufsignatur unterstützt
(Klassen-Template) |
|
(C++26)
|
nicht-besitzender Wrapper für jedes aufrufbare Objekt
(Klassen-Template) |
|
(C++11)
|
die Ausnahme, die beim Aufruf eines leeren
std::function
geworfen wird
(Klasse) |
|
(C++11)
|
erstellt ein Funktionsobjekt aus einem Zeiger auf ein Mitglied
(Funktions-Template) |
Identität
std::identity ist das Identitätsfunktionsobjekt: Es gibt sein Argument unverändert zurück.
|
(C++20)
|
Funktionsobjekt, das sein Argument unverändert zurückgibt
(Klasse) |
Partielle Funktionsanwendung
std::bind_front und std::bind bieten Unterstützung für partielle Funktionsapplikation , d.h. das Binden von Argumenten an Funktionen zur Erzeugung neuer Funktionen.
|
(C++20)
(C++23)
|
bindet eine variable Anzahl von Argumenten in Reihenfolge an ein Funktionsobjekt
(Funktions-Template) |
|
(C++11)
|
bindet ein oder mehrere Argumente an ein Funktionsobjekt
(Funktions-Template) |
|
(C++11)
|
zeigt an, dass ein Objekt ein
std::bind
-Ausdruck ist oder als solcher verwendet werden kann
(Klassen-Template) |
|
(C++11)
|
zeigt an, dass ein Objekt ein Standard-Platzhalter ist oder als solcher verwendet werden kann
(Klassen-Template) |
|
Definiert im Namensraum
std::placeholders
|
|
|
(C++11)
|
Platzhalter für die ungebundenen Argumente in einem
std::bind
-Ausdruck
(Konstante) |
Negatoren
std::not_fn erstellt ein Funktionsobjekt, das das Ergebnis des übergebenen aufrufbaren Objekts negiert.
|
(C++17)
|
erstellt ein Funktionsobjekt, das das Komplement des Ergebnisses des von ihm gehaltenen Funktionsobjekts zurückgibt
(Funktions-Template) |
Searcher
Es werden Sucher bereitgestellt, die mehrere String-Suchalgorithmen implementieren und entweder direkt oder mit std::search verwendet werden können.
|
(C++17)
|
Implementierung des Standard-C++-Bibliothekssuchalgorithmus
(Klassentemplate) |
|
(C++17)
|
Implementierung des Boyer-Moore-Suchalgorithmus
(Klassentemplate) |
|
(C++17)
|
Implementierung des Boyer-Moore-Horspool-Suchalgorithmus
(Klassentemplate) |
Referenz-Wrapper
Referenz-Wrapper ermöglichen es, Referenzargumente in kopierbaren Funktionsobjekten zu speichern:
|
(C++11)
|
CopyConstructible
und
CopyAssignable
Referenz-Wrapper
(Klassen-Template) |
|
(C++11)
(C++11)
|
erstellt einen
std::reference_wrapper
mit einem vom Argument abgeleiteten Typ
(Funktions-Template) |
|
(C++20)
(C++20)
|
ermittelt den in
std::reference_wrapper
gekapselten Referenztyp
(Klassen-Template) |
Transparente Funktionsobjekte
Assoziative Container
und
Ungeordnete assoziative Container
(seit C++20)
bieten heterogene Lookup-
und Erasure-Operationen
(seit C++23)
an, diese sind jedoch nur aktiviert, wenn der bereitgestellte Funktionsobjekttyp
Alle transparenten Funktionsobjekttypen in der Standardbibliothek definieren einen geschachtelten Typ
|
(seit C++14) |
Operator-Funktionsobjekte
C++ definiert die folgenden Funktionsobjekte, die gängige arithmetische und logische Operationen repräsentieren.
|
Die void -Spezialisierungen leiten ihre Parameter- und Rückgabetypen von ihren Argumenten ab, sie sind alle transparent . |
(since C++14) |
Arithmetische Operationen |
|
|
Funktionsobjekt, das
x
+
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
+
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
-
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
-
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
*
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
*
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplatespezialisierung) |
|
Funktionsobjekt, das
x
/
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
/
y
implementiert und Parameter- und Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
%
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
%
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
-
x
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
-
x
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
Vergleiche |
|
|
Funktionsobjekt, das
x
==
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
==
y
implementiert und Parameter- und Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
!
=
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
!
=
y
implementiert und Parameter- und Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
>
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
>
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
<
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
<
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
>=
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
>=
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
<=
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
<=
y
implementiert und Parameter- und Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
Logische Operationen |
|
|
Funktionsobjekt, das
x
&&
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
&&
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
||
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
||
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
!
x
implementiert
(Klassen-Template) |
|
|
(C++14)
|
Funktionsobjekt, das
!
x
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
Bitweise Operationen |
|
|
Funktionsobjekt, das
x
&
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
&
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
|
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
|
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
Funktionsobjekt, das
x
^
y
implementiert
(Klassentemplate) |
|
|
(C++14)
|
Funktionsobjekt, das
x
^
y
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplate-Spezialisierung) |
|
(C++14)
|
Funktionsobjekt, das
~x
implementiert
(Klassentemplate) |
|
(C++14)
|
Funktionsobjekt, das
~x
implementiert und Parameter- sowie Rückgabetypen ableitet
(Klassentemplatespezialisierung) |
Eingeschränkte VergleichsfunktionsobjekteDie folgenden Vergleichsfunktionsobjekte sind eingeschränkt .
Alle diese Funktionsobjekte sind transparent .
|
(seit C++20) |
HilfsmittelDie folgenden ausschließlich expository Elemente werden für mehrere Komponenten in der Standardbibliothek verwendet, sind jedoch nicht Teil der Schnittstelle der Standardbibliothek.
|
(seit C++26) |
Alte Binder und AdapterMehrere Dienstprogramme, die frühe funktionale Unterstützung boten, sind veraltet und entfernt:
|
(bis C++20) | ||||||||||||||||||||||||||||||||||||
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 185 | C++98 | Die Verwendung von Funktionsobjekten verbesserte die Programmeffizienz | Die Behauptung wurde entfernt |
| LWG 660 | C++98 | Funktionsobjekte für bitweise Operationen fehlen | Hinzugefügt |
| LWG 2149 | C++98 |
Funktionsobjekte, die ein oder zwei Argumente nehmen, mussten
geschachtelte Typen zur Bezeichnung der Argument- und Ergebnistypen bereitstellen |
Nicht erforderlich |
| LWG 2219 | C++11 |
INVOKE
behandelte
std::reference_wrapper
nicht korrekt
|
Behandelt korrekt |
| LWG 2420 | C++11 |
INVOKE<R>
verwarf den Rückgabewert nicht, wenn
R
void
ist
|
Verwirft den Rückgabewert in diesem Fall |
|
LWG 2926
( P0604R0 ) |
C++11 |
Die Syntax der
INVOKE
-Operation mit einem Rückgabe-
typ
R
war
INVOKE
(
f, t1, t2, ..., tN, R
)
|
Geändert zu
INVOKE<R>
(
f, t1, t2, ..., tN
)
|
| LWG 3655 | C++11 |
INVOKE
behandelte Unions aufgrund der Lösung von
LWG Issue 2219 nicht korrekt |
Behandelt korrekt |