std::move_only_function
| 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
(C++23) |
Construye un nuevo objeto de tipo std::move_only_function. (función miembro pública) |
(C++23) |
Destruye un objeto std::move_only_function. (función miembro pública) |
(C++23) |
Reemplaza o destruye el objetivo. (función miembro pública) |
(C++23) |
Intercambia el objetivo de dos objetos std::move_only_function. (función miembro pública) |
(C++23) |
Verifica si la instancia de std::move_only_function tiene un objetivo. (función miembro pública) |
(C++23) |
Invoca al objetivo. (función miembro pública) |
Funciones no miembro
| Especializa el algoritmo std::swap. (función) | |
(C++23) |
Compara una instancia de std::move_only_function con nullptr. (función) |
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
| Esta sección está incompleta Razón: sin ejemplo |
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) |