std::move_only_function::operator()
R operator()( Args... args ) /*cv*/ /*ref*/ noexcept(/*noex*/);
|
(desde C++23) | |
Invoca el objetivo invocable almacenado con los parámetros args. Las partes /*cv*/, /*ref*/ y /*noex*/ de operator() son idénticas a las del parámetro de plantilla de std::move_only_function.
Equivalente a return std::invoke_r<R>(/*cv-ref-cast*/(f), std::forward<Args>(args)...);, donde f es un valor l (lvalue) no cualificado-cv que denota el objeto destino de *this, y /*cv-ref-cast*/(f) es equivalente a:
fsi cv ref está vacío o es&, ostd::as_const(f)si cv ref esconstoconst &, ostd::move(f)si cv ref es&&, ostd::move(std::as_const(f))si cv ref esconst &&.
El comportamiento no está definido si *this está vacío.
Parámetros
| args | - | parámetros para pasar al destino invocable almacenado |
Valor de retorno
std:: invoke_r < R > ( /*conversión calificador cv-ref*/ ( f ) , std:: forward < Args > ( args ) ... ) .
Excepciones
Propaga la excepción lanzada por la llamada de función subyacente.
Ejemplo
El siguiente ejemplo muestra cómo std::move_only_function puede pasarse a otras funciones por valor. También muestra cómo std::move_only_function puede almacenar lambdas.
#include <iostream> #include <functional> void call(std::move_only_function<int() const> f) // can be passed by value { std::cout << f() << '\n'; } int normal_function() { return 42; } int main() { int n = 1; auto lambda = [&n](){ return n; }; std::move_only_function<int() const> f = lambda; call(std::move(f)); n = 2; call(lambda); f = normal_function; call(std::move(f)); }
Salida:
1 2 42
Véase también
|
invoca el objetivo
(función miembro pública de
std::function<R(Args...)>
)
|
|
|
llama a la función almacenada
(función miembro pública de
std::reference_wrapper<T>
)
|
|
|
(C++17)
(C++23)
|
invoca cualquier objeto
Callable
con los argumentos dados
y posibilidad de especificar el tipo de retorno
(desde C++23)
(plantilla de función) |