std::function::function
function() noexcept; |
(1) | (desde C++11) |
function( std::nullptr_t ) noexcept; |
(2) | (desde C++11) |
function( const function& other ); |
(3) | (desde C++11) |
| (4) | ||
function( function&& other ); |
(desde C++11) (hasta C++20) |
|
function( function&& other ) noexcept; |
(desde C++20) | |
template< class F > function( F&& f ); |
(5) | (desde C++11) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc ) noexcept; |
(6) | (desde C++11) (eliminado en C++17) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, std::nullptr_t ) noexcept; |
(7) | (desde C++11) (eliminado en C++17) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, const function& other ); |
(8) | (desde C++11) (eliminado en C++17) |
template< class Alloc > function( std::allocator_arg_t, const Alloc& alloc, function&& other ); |
(9) | (desde C++11) (eliminado en C++17) |
template< class F, class Alloc > function( std::allocator_arg_t, const Alloc& alloc, F f ); |
(10) | (desde C++11) (eliminado en C++17) |
Construye un objeto std::function a partir de una variedad de fuentes.
std::function vacío.other al destino de *this. Si other está vacío, *this también estará vacío después de la llamada. Para (4), other está en un estado válido pero no especificado después de la llamada.std::forward<F>(f). el destino es de tipo std::decay<F>::type. Si f es un puntero nulo a función, un puntero nulo a miembro, o un valor vacío de alguna especialización de std::function, {{c|*this} } estará vacío después de la llamada. Este constructor no participa en la resolución de sobrecarga a menos que el tipo de destino no sea el mismo que function, y su l-valor es Callable para los tipos de argumento Args... y tipo de retorno R. El programa está mal formado si el tipo de destino no es copiable o si la inicialización del destino está mal formada.alloc se usa para asignar memoria para cualquier estructura de datos interna que function podría usar.Cuando el destino es un puntero a función o un std::reference_wrapper, la optimización de objetos pequeños está garantizada, es decir, estos destinos siempre se almacenan directamente dentro del objeto std::function, no se realiza ninguna asignación dinámica. Se pueden construir otros objetos grandes en el almacenamiento asignado dinámico y se puede acceder a ellos mediante el objeto std::function a través de un puntero.
Parámetros
| other | - | El objeto función usado para inicializar *this.
|
| f | - | Un objeto invocable usado para inicializar *this.
|
| alloc | - | Un Allocator usado para la asignación de memoria interna. |
| Requisitos de tipo | ||
- debe satisfacer los requisitos de Callable y CopyConstructible.
| ||
-Alloc debe satisfacer los requisitos de Allocator.
| ||
Excepciones
other es un puntero a función o un std::reference_wrapper, de lo contrario puede lanzar std::bad_alloc o cualquier excepción lanzada por el constructor usado para copiar o mover el objeto invocable almacenado.|
4) No lanza si el destino de
other es un puntero a función o un std::reference_wrapper, de lo contrario puede lanzar std::bad_alloc o cualquier excepción lanzada por el constructor usado para copiar o mover el objeto invocable almacenado. |
(hasta C++20) |
f es un puntero a función std::reference_wrapper, de lo contrario puede lanzar std::bad_alloc o cualquier excepción lanzada por el constructor de copia del objeto invocable almacenado.Notas
El apoyo del asignador de memoria de std::function se especificó de manera deficiente y se implementó de manera inconsistente. Algunas implementaciones no proporcionan las sobrecargas (6-10) en absoluto, algunas proporcionan las sobrecargas pero ignoran el argumento del asignador proporcionado, y algunas proporcionan las sobrecargas y usan el asignador proporcionado para la construcción, pero no cuando std::function se reasigna. Como resultado, el apoyo del asignador de memoria se eliminó en C++17.
Ejemplo
| Esta sección está incompleta Razón: sin ejemplo |
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2132 | C++11 | El constructor que toma un objeto Callable podría ser ambiguo. | Se restringió. |
| LWG 2774 | C++11 | El constructor que toma un objeto Callable realizaba una operación de movimiento adicional. | Se eliminó. |
Véase también
(C++23) |
Construye un nuevo objeto de tipo std::move_only_function. (función miembro pública de std::move_only_function<R(Args...) cv ref noexcept(noex)>)
|