C++ named requirements: FunctionObject
From es.cppreference.net
Un FunctionObject type es el tipo de un objeto que puede utilizarse a la izquierda del operador de llamada a función.
Contenidos |
Requisitos
El tipo
T
satisface
FunctionObject
si
-
El tipo
Tsatisface std::is_object , y
Dado
-
f, un valor de tipoToconst T, -
args, lista de argumentos adecuada, que puede estar vacía.
Las siguientes expresiones deben ser válidas:
| Expression | Requisitos |
|---|---|
| f ( args ) | realiza una llamada de función |
Notas
Las funciones y las referencias a funciones no son tipos de objetos función, pero pueden usarse donde se esperan tipos de objetos función debido a la conversión implícita de función a puntero.
Biblioteca estándar
- Todos los pointers to functions cumplen este requisito.
- Todos los function objects definidos en <functional> .
- Algunos return types de funciones de <functional> .
Ejemplo
Demuestra diferentes tipos de objetos función.
Ejecutar este código
#include <functional> #include <iostream> void foo(int x) { std::cout << "foo(" << x << ")\n"; } void bar(int x) { std::cout << "bar(" << x << ")\n"; } int main() { void(*fp)(int) = foo; fp(1); // llama a foo usando el puntero a función std::invoke(fp, 2); // todos los tipos FunctionObject son Callable auto fn = std::function(foo); // ver también el resto de <functional> fn(3); fn.operator()(3); // el mismo efecto que fn(3) struct S { void operator()(int x) const { std::cout << "S::operator(" << x << ")\n"; } } s; s(4); // llama a s.operator() s.operator()(4); // lo mismo que s(4) auto lam = [](int x) { std::cout << "lambda(" << x << ")\n"; }; lam(5); // llama a la lambda lam.operator()(5); // lo mismo que lam(5) struct T { using FP = void (*)(int); operator FP() const { return bar; } } t; t(6); // t se convierte a un puntero a función static_cast<void (*)(int)>(t)(6); // lo mismo que t(6) t.operator T::FP()(6); // lo mismo que t(6) }
Salida:
foo(1) foo(2) foo(3) foo(3) S::operator(4) S::operator(4) lambda(5) lambda(5) bar(6) bar(6) bar(6)
Véase también
|
un tipo para el cual la operación de invocación está definida
(requisito con nombre) |