◐ Shell
clean mode source ↗

std::move_only_function - cppreference.com

De cppreference.com

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.

Tipos miembro

Tipo Definición
result_type R

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]

Funciones no miembro

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)

Ejemplo

Véase también

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