Namespaces
Variants

std::move_only_function::operator()

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
Objetos función
Invocación de funciones
(C++17)(C++23)
Objeto función identidad
(C++20)
Envoltorios de operadores transparentes
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

Binders y adaptadores antiguos
(hasta C++17*)
(hasta C++17*)
(hasta C++17*)
(hasta C++17*)  
(hasta C++17*)
(hasta C++17*)(hasta C++17*)(hasta C++17*)(hasta C++17*)
(hasta C++20*)
(hasta C++20*)
(hasta C++17*)(hasta C++17*)
(hasta C++17*)(hasta C++17*)

(hasta C++17*)
(hasta C++17*)(hasta C++17*)(hasta C++17*)(hasta C++17*)
(hasta C++20*)
(hasta C++20*)
 
 
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:

  • f si cv ref está vacío o es &, o
  • std::as_const(f) si cv ref es const o const &, o
  • std::move(f) si cv ref es &&, o
  • std::move(std::as_const(f)) si cv ref es const &&.

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)