C + + Konzepte: FunctionObject
Aus cppreference.com
Ein Typ FunctionObject ist der Typ eines Objektes, der links vom Funktionsaufrufoperator benutzt werden kann.
Anforderungen
Der Typ T erfüllt die Anforderungen von FunctionObject falls
- für
Tgilt std::is_object ist wahr, - ein gegebenes
fden TypToderconst That - und
argseine passende Argumentenlist, die auch leer sein darf, ist.
Der folgende Aussdruck muß dann gültig sein:
| Ausdruck | Anforderung |
|---|---|
f(args)
|
performs a function call |
Anmerkungen
Funktionen und Referenzen auf Funktionen sind keine Funktionsobjekte, können aber überall benutzt werden, wo Funktionsobjekte erwartet werden. Dieses ist möglich durch die implizite Umwandlung von Funktionen auf Zeiger.
Standard Bibliothek
- Alle Zeiger auf Funktionen erfüllen diese Anforderung.
- Alle Funktionsobjekte, die in <functional> definiert sind, erfüllen diese Anforderung.
- Einige Rückgabetypen von Funktionen aus <functional> erfüllen diese ebenfalls.
Beispiele
zeigt verschiedene Typen von Funktionsobjekten
#include <iostream>
void foo(int x) { std::cout << "foo(" << x << ")\n"; }
int main()
{
void(*fp)(int) = foo;
fp(1); // calls foo using the pointer to function
struct S {
void operator()(int x) const { std::cout << "S::operator(" << x << ")\n"; }
} s;
s(2); // calls s.operator()
s.operator()(3); // the same
auto lam = [](int x) { std::cout << "lambda(" << x << ")\n"; };
lam(4); // calls the lambda
lam.operator()(5); // the same
}
Output:
foo(1)
S::operator(2)
S::operator(3)
lambda(4)
lambda(5)
Referenzen
| ein Typ, für den der Aufrufoperator definiert ist (Konzept) | |