Requisitos denominados de C++: FunctionObject
De cppreference.com
Un tipo FunctionObject es el tipo de un objeto que puede usarse a la izquierda del operador de llamada a función.
Requisitos
El tipo T satisface a FunctionObject si
- El tipo
Tsatisface a std::is_object, y
Dados
f, un valor de tipoToconst T, yargs, una lista de argumentos adecuada, que puede estar vacía.
Las siguientes expresiones deben ser válidas:
| Expresión | Requisitos |
|---|---|
f(args)
|
Realiza una llamada a función. |
Notas
Las funciones y referencias a función no son tipos objeto función, pero pueden usarse dondequiera que se esperen tipos objeto función debido a la conversión implícita de función a puntero.
Biblioteca estándar
- Todos los punteros a función satisfacen este requerimiento.
- Todos los objetos función definidos en <functional>.
- Algunos tipos de retorno de las funciones de <functional>.
Ejemplo
Muestra diferentes tipos de objetos de función.
Ejecuta 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); // véase 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 al lambda
lam.operator()(5); // lo mismo que lam(5)
struct T
{
using FP = void (*)(int);
operator FP() const { return bar; }
} t;
t(6); // se convierte t en 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 se define la operación de invocación. (requerimiento denominado) |