Espacios de nombres
Variantes

std::function::function

De cppreference.com
 
 
Biblioteca de servicios
 
Objetos función
Envoltorios de funciones
(C++11)
(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)
 
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
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.

1-2) Crea un un objeto std::function vacío.
3-4) Copia (3) o mueve (4) el destino de 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.
5) Inicializa el destino with 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.
6-10) Igual que (1-5) excepto que 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
-
std::decay<F>::type debe satisfacer los requisitos de Callable y CopyConstructible.
-
Alloc debe satisfacer los requisitos de Allocator.

Excepciones

3,8,9) 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.
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)
5,10) No lanza si 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

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

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)>) [editar]