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...)>; | (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 destinoCallable 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
(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) |
[editar]Funciones no miembro
Especializa el algoritmo std::swap. (función) | |
(C++23) | Compara una instancia de std::move_only_function con nullptr. (función) |
[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
Esta sección está incompleta Razón: sin 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) |