Funktionsobjekte
Ein Funktions-Objekt ist jedes Objekt, für das der Funktionsaufruf-Operator definiert ist. C++ stellt viele eingebaute Funktions-Objekte sowie Unterstützung für die Erstellung und Manipulation neuer Funktions-Objekte bereit.
Inhalt |
[bearbeiten] Funktionsaufruf
|
Die expositions-nur Operation Sei 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 und der Möglichkeit, den Rückgabetyp anzugeben(seit C++23) (Funktions-Template) |
[bearbeiten] Funktions-Wrapper
Diese polymorphen Wrapper-Klassen bieten Unterstützung für die Speicherung beliebiger Funktions-Objekte.
| (C++11) |
kopierfähiger Wrapper für jedes kopierkonstruierbare aufrufbare Objekt (Klassen-Template) |
| (C++23) |
Move-only-Wrapper für jedes aufrufbare Objekt, das Qualifizierer in einer gegebenen Aufrufsignatur unterstützt (Klassen-Template) |
| (C++26) |
kopierfähiger Wrapper für jedes kopierkonstruierbare aufrufbare Objekt, das Qualifizierer 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 einer leeren std::function ausgelöst wird (Klasse) |
| (C++11) |
erstellt ein Funktions-Objekt aus einem Zeiger auf ein Member (Funktions-Template) |
[bearbeiten] Identität
std::identity ist das Identitätsfunktions-Objekt: es gibt sein Argument unverändert zurück.
| (C++20) |
Funktions-Objekt, das sein Argument unverändert zurückgibt (Klasse) |
[bearbeiten] Partielle Funktionsanwendung
std::bind_front und std::bind bieten Unterstützung für die partielle Funktionsanwendung, 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 Funktions-Objekt (Funktions-Template) |
| (C++11) |
bindet ein oder mehrere Argumente an ein Funktions-Objekt (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 Namespace
std::placeholders | |
| (C++11) |
Platzhalter für die ungebundenen Argumente in einem std::bind-Ausdruck(Konstante) |
[bearbeiten] Negatoren
std::not_fn erstellt ein Funktions-Objekt, das das Ergebnis des übergebenen aufrufbaren Objekts negiert.
| (C++17) |
erstellt ein Funktions-Objekt, das das Komplement des Ergebnisses des gehaltenen Funktions-Objekts zurückgibt (Funktions-Template) |
[bearbeiten] Sucher
Sucher, die mehrere Zeichenketten-Suchalgorithmen implementieren, werden bereitgestellt und können entweder direkt oder mit std::search verwendet werden.
| (C++17) |
Implementierung des standardmäßigen C++-Bibliotheks-Suchalgorithmus (Klassen-Template) |
| (C++17) |
Implementierung des Boyer-Moore-Suchalgorithmus (Klassen-Template) |
| Implementierung des Boyer-Moore-Horspool-Suchalgorithmus (Klassen-Template) |
[bearbeiten] Referenz-Wrapper
Referenz-Wrapper ermöglichen die Speicherung von Referenzargumenten in kopierfähigen Funktions-Objekten
| (C++11) |
CopyConstructible und CopyAssignable Referenz-Wrapper(Klassen-Template) |
| (C++11)(C++11) |
erstellt einen std::reference_wrapper, wobei der Typ aus seinem Argument abgeleitet wird (Funktions-Template) |
| (C++20)(C++20) |
holt den Referenztyp, der in std::reference_wrapper eingepackt ist (Klassen-Template) |
Transparente Funktions-ObjekteAssoziative Container und ungeordnete assoziative Container(seit C++20) bieten heterogene Lookups und Löschoperationen(seit C++23), aber diese sind nur dann aktiviert, wenn der angegebene Funktions-Objekt-Typ Alle transparenten Funktions-Objekt-Typen in der Standardbibliothek definieren einen verschachtelten Typ |
(seit C++14) |
[bearbeiten] Operator-Funktions-Objekte
C++ definiert die folgenden Funktions-Objekte, die gängige arithmetische und logische Operationen darstellen.
|
Die void-Spezialisierungen leiten ihre Parameter- und Rückgabetypen von ihren Argumenten ab, sie sind alle transparent. |
(seit C++14) |
Arithmetische Operationen | |
| Funktions-Objekt, das x + y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x + y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x - y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x - y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x * y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x * y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x / y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x / y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x % y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x % y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das -x implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das -x implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
Vergleiche | |
| Funktions-Objekt, das x == y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x == y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x != y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x != y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x > y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x > y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x < y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x < y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x >= y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x >= y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x <= y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x <= y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
Logische Operationen | |
| Funktions-Objekt, das x && y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x && y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das x || y implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das x || y implementiert und Parameter- und Rückgabetypen ableitet (Klassen-Template-Spezialisierung) |
| Funktions-Objekt, das !x implementiert (Klassen-Template) | |
| (C++14) |
Funktions-Objekt, das !x implementiert und Parameter- und Rückgabetypen ableitet (Klassenvorlagenspezialisierung) |
Bitweise Operationen | |
| Funktionsobjekt, das x & y implementiert (Klassenvorlage) | |
| (C++14) |
Funktionsobjekt, das x & y implementiert, wobei Parameter- und Rückgabetypen abgeleitet werden (Klassenvorlagenspezialisierung) |
| Funktionsobjekt, das x | y implementiert (Klassenvorlage) | |
| (C++14) |
Funktionsobjekt, das x | y implementiert, wobei Parameter- und Rückgabetypen abgeleitet werden (Klassenvorlagenspezialisierung) |
| Funktionsobjekt, das x ^ y implementiert (Klassenvorlage) | |
| (C++14) |
Funktionsobjekt, das x ^ y implementiert, wobei Parameter- und Rückgabetypen abgeleitet werden (Klassenvorlagenspezialisierung) |
| (C++14) |
Funktionsobjekt, das ~x implementiert (Klassenvorlage) |
| (C++14) |
Funktionsobjekt, das ~x implementiert, wobei Parameter- und Rückgabetypen abgeleitet werden (Klassenvorlagenspezialisierung) |
Beschränkte VergleichsfunktionsobjekteDie folgenden Vergleichsfunktionsobjekte sind beschränkt.
Alle diese Funktionsobjekte sind transparent.
|
(seit C++20) |
HilfselementeDie folgenden nur für die Exposition bestimmten Elemente werden für verschiedene Komponenten in der Standardbibliothek verwendet, sind aber nicht Teil der Schnittstelle der Standardbibliothek.
|
(seit C++26) |
Alte Binder und AdaptorenEinige Dienstprogramme, die eine frühe funktionale Unterstützung boten, sind veraltet und entfernt worden
|
(bis C++20) | ||||||||||||||||||||||||||||||||||||
[edit] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes 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 aufnahmen, mussten verschachtelte 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 war |
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 zuINVOKE<R>(f, t1, t2, ..., tN)
|
| LWG 3655 | C++11 | INVOKE behandelte Unions nicht korrektwegen der Auflösung von LWG-Problem 2219 |
behandelt korrekt |