Espacios de nombres
Variantes
Acciones

std::move_only_function

De cppreference.com
< cpp‎ | utility‎ | functional
 
 
Biblioteca de servicios
 
Objetos función
Envoltorios de funciones
(C++11)
move_only_function
(C++23)
(C++11)
Aplicación parcial de funciones
(C++20)
(C++11)
Invocación de funciones
(C++17)(C++23)
Objeto función identidad
(C++20)
Envoltorios de referencias
(C++11)(C++11)
Envoltorios de operador 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)
Negadores
(C++17)
Buscadores
Comparadores restringidos
Vinculadores 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++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)
 
 
Definido en el archivo de encabezado <functional>
template< class... >
class move_only_function; // not defined
(desde C++23)
template< class R, class... Args >

class move_only_function<R(Args...)>;
template< class R, class... Args >
class move_only_function<R(Args...) noexcept>;
template< class R, class... Args >
class move_only_function<R(Args...) &>;
template< class R, class... Args >
class move_only_function<R(Args...) & noexcept>;
template< class R, class... Args >
class move_only_function<R(Args...) &&>;
template< class R, class... Args >
class move_only_function<R(Args...) && noexcept>;
template< class R, class... Args >
class move_only_function<R(Args...) const>;
template< class R, class... Args >
class move_only_function<R(Args...) const noexcept>;
template< class R, class... Args >
class move_only_function<R(Args...) const &>;
template< class R, class... Args >
class move_only_function<R(Args...) const & noexcept>;
template< class R, class... Args >
class move_only_function<R(Args...) const &&>;
template< class R, class... Args >

class move_only_function<R(Args...) const && noexcept>;
(desde C++23)

La plantilla de clase std::move_only_function es un contenedor de funciones polimórficas de propósito general. Los objetos std::move_only_function pueden almacenar e invocar cualquier destino Callable construible (no es necesario que sea construible por movimiento)–funciones, expresiones lambda, expresiones de vinculación, u otros objetos función, así como punteros a funciones miembro y punteros a objetos miembro.

El objeto invocable almacenado se llama el destino de std::move_only_function. Si un objeto std::move_only_function no contiene objetivo, se llama vacío. A diferencia de std::function, invocar un objeto std::move_only_function vacío da como resultado un comportamiento no definido.

Los objetos std::move_only_function admiten toda combinación posible de calificadores const y volatile, calificadores de referencia, y especificadores noexcept que no incluyen volatile suministrado en su parámetro de plantilla. Estos calificadores y especificador (si los hay) se agregan a su operador operator().

std::move_only_function satisface los requerimientos de MoveConstructible y MoveAssignable, pero no satisface los de CopyConstructible o CopyAssignable.

Contenido

[editar] Tipos miembro

Tipo Definición
result_type R

[editar] Funciones miembro

Construye un nuevo objeto de tipo std::move_only_function.
(función miembro pública) [editar]
Destruye un objeto std::move_only_function.
(función miembro pública) [editar]
(C++23)
Reemplaza o destruye el objetivo.
(función miembro pública) [editar]
(C++23)
Intercambia el objetivo de dos objetos std::move_only_function.
(función miembro pública) [editar]
Verifica si la instancia de std::move_only_function tiene un objetivo.
(función miembro pública) [editar]
Invoca al objetivo.
(función miembro pública) [editar]

[editar] Funciones no miembro

Especializa el algoritmo std::swap.
(función) [editar]
Compara una instancia de std::move_only_function con nullptr.
(función) [editar]

[editar] Notas

Se recomienda a las implementaciones almacenar un objeto invocable de tamaño pequeño dentro del objeto std::move_only_function. Dicha optimización de objetos pequeños se requiere efectivamente para punteros de función y especializaciones std::reference_wrapper, y solo se puede aplicar a tipos T para los cuales std::is_nothrow_move_construcible_v<T> es true.

Si un objeto std::move_only_function que devuelve una referencia se inicializa desde una función o un objeto función que devuelve un pr-valor (incluida una expresión lambda sin un tipo de retorno al final), el programa está mal formado porque vincular la referencia a un temporal devuelta está prohibido. Véase también la sección de notas de std::function .


Macro de Prueba de característica Valor Estándar
__cpp_lib_move_only_function 202110L (C++23)

[editar] Ejemplo

[editar] Véase también

(C++11)
Envuelve un objeto que puede ser llamado a cualquier tipo con la signatura de llamada a función especificada.
(plantilla de clase) [editar]