<functional>
Define funciones de la biblioteca estándar de C++ que ayudan a construir objetos de función (también denominados functores) y sus enlazadores. Un objeto de función es un objeto de un tipo que define operator()
. Un objeto de función puede ser un puntero a función, pero por lo general el objeto se utiliza para almacenar información adicional a la que se puede tener acceso durante una llamada de función.
Requisitos
Encabezado:<functional>
Espacio de nombres: std
Comentarios
Los algoritmos necesitan dos tipos de objetos de función: unarios y binarios. Los objetos de función unaria requieren un argumento y los objetos de función binaria requieren dos argumentos. Se pueden pasar un objeto de función y punteros de función como un predicado para un algoritmo, pero los objetos de función también son adaptables y aumentan el ámbito, la flexibilidad y la eficacia de la biblioteca estándar de C++. Por ejemplo, si un valor necesita estar enlazado a una función para que se pueda pasar a un algoritmo, no se puede usar un puntero a función. Los adaptadores de función convierten los punteros a función en objetos de función adaptables que se pueden enlazar a un valor. El encabezado <functional> también contiene adaptadores de funciones miembro que permiten llamar a funciones miembro como objetos de función adaptables. Las funciones son adaptables si tienen declaraciones de tipo anidadas que especifican sus tipos de argumento y de valor devuelto. Los objetos de función y sus adaptadores permiten que la biblioteca estándar de C++ actualice aplicaciones existentes y ayudan a integrar la biblioteca en el entorno de programación de C++.
La implementación de los objetos de función en <funcional> incluye funtores de operador transparentes, que son especializaciones de objetos de función estándar y no toman parámetros de plantilla, y realizan un reenvío perfecto de los argumentos de función y el retorno perfecto del resultado. Estas especializaciones de plantilla no requieren que se especifiquen tipos de argumentos cuando se invocan funciones de operadores aritméticos, de comparación, lógicos y bit a bit. Se pueden sobrecargar operadores aritméticos, de comparación, lógicos o bit a bit para sus propios tipos, o para combinaciones heterogéneas de tipos, y utilizar después las funciones de operador transparentes como argumentos de función. Por ejemplo, si el tipo MyType implementa operator<
, se puede llamar a sort(my_collection.begin(), my_collection.end(), less<>())
en lugar de especificar de forma explícita el tipo sort(my_collection.begin(), my_collection.end(), less<MyType>())
.
Las características siguientes se agregan en C++11, C++14 y C++17:
Una signatura de llamada es el nombre de un tipo de valor devuelto seguido de una lista separada por comas entre paréntesis de cero o más tipos de argumentos.
Un tipo al que se puede llamar es un puntero a función, un puntero a función miembro, un puntero a datos de miembro o un tipo de clase cuyos objetos pueden aparecer de forma inmediata a la izquierda de un operador de llamada de función.
Un objeto al que se puede llamar es un objeto de un tipo al que se puede llamar.
Un tipo contenedor de llamadas es un tipo que contiene un objeto al que se puede llamar y que admite una operación de llamada que reenvía a ese objeto.
Un contenedor de llamadas es un objeto de un tipo contenedor de llamadas.
Un objeto de destino es el objeto al que se puede llamar almacenado por un objeto contenedor de llamadas.
La pseudofunción INVOKE(f, t1, t2, ..., tN)
significa una de las cosas siguientes:
(t1.*f)(t2, ..., tN)
cuandof
es un puntero a una función miembro de claseT
yt1
es un objeto de tipoT
, una referencia a un objeto de tipoT
o una referencia a un objeto de un tipo derivado deT
.((*t1).*f)(t2, ..., tN)
cuandof
es un puntero a una función miembro de claseT
yt1
no es uno de los tipos descritos en el elemento anterior.t1.*f
cuando N == 1 yf
es un puntero a datos de miembro de una claseT
yt1
es un objeto de tipoT
, una referencia a un objeto de tipoT
o una referencia a un objeto de un tipo derivado deT
.(*t1).*f
cuando N == 1 yf
es un puntero a datos de miembro de una claseT
yt1
no es uno de los tipos descritos en el elemento anterior.f(t1, t2, ..., tN)
en todos los demás casos.
La pseudofunción INVOKE(f, t1, t2, ..., tN, R)
significa INVOKE(f, t1, t2, ..., tN)
convertido implícitamente en R
.
Si un contenedor de llamadas tiene un tipo de resultado débil, el tipo de su tipo miembro result_type
se basa en el tipo T
del objeto de destino del contenedor, de la manera siguiente:
Si
T
es puntero a función,result_type
es un sinónimo del tipo de valor devuelto deT
.Si
T
es puntero a función miembros,result_type
es un sinónimo para el tipo de valor devuelto deT
.Si
T
es un tipo de clase que tiene un tipo de miembroresult_type
,result_type
es un sinónimo deT::result_type
.De lo contrario, no hay ningún miembro
result_type
.
Cada contenedor de llamadas tiene un constructor de movimientos y un constructor de copias. Un contenedor de llamadas simple es un contenedor de llamadas que tiene un operador de asignación y cuyo constructor de copias, constructor de movimientos y operador de asignación no producen excepciones. Un contenedor de llamadas de reenvío es un contenedor de llamadas al que se puede llamar mediante una lista de argumentos arbitraria y que entrega los argumentos como referencias al objeto contenedor al que se puede llamar. Todos los argumentos de valor R se entregan como referencias rvalue y los argumentos de valor L se envían como referencias lvalue.
Miembros
Clases
NOMBRE | Descripción |
---|---|
bad_function_call | Clase que describe una excepción iniciada para indicar que se ha producido un error en una llamada a operator() en un objeto function porque el objeto estaba vacío. |
binary_negate | Clase de plantilla que proporciona una función miembro que niega el valor devuelto de una función binaria especificada. (En desuso en C++17). |
binder1st | Plantilla de clase que proporciona un constructor que convierte un objeto de función binaria en un objeto de función unaria enlazando el primer argumento de la función binaria a un valor especificado. (En desuso en C++11 y quitada en C++17). |
binder2nd | Plantilla de clase que proporciona un constructor que convierte un objeto de función binaria en un objeto de función unaria enlazando el segundo argumento de la función binaria a un valor especificado. (En desuso en C++11 y quitada en C++17). |
boyer_moore_horspool_searcher | |
boyer_moore_searcher | |
const_mem_fun_ref_t | Clase de adaptadores que permite llamar a una función miembro const que no toma ningún argumento como un objeto de función unaria cuando se inicializa con un argumento de referencia. (En desuso en C++11 y quitada en C++17). |
const_mem_fun_t | Clase de adaptadores que permite llamar a una función miembro const que no toma ningún argumento como un objeto de función unaria cuando se inicializa con un argumento de puntero. (En desuso en C++11 y quitada en C++17). |
const_mem_fun1_ref_t | Clase de adaptadores que permite llamar a una función miembro const que toma un solo argumento como un objeto de función binaria cuando se inicializa con un argumento de referencia. (En desuso en C++11 y quitada en C++17). |
const_mem_fun1_t | Clase de adaptadores que permite llamar a una función miembro const que toma un solo argumento como un objeto de función binaria cuando se inicializa con un argumento de puntero. (En desuso en C++11 y quitada en C++17). |
default_searcher | |
function | Clase que contiene un objeto al que se puede llamar. |
hash | Clase que calcula un código hash para un valor. |
is_bind_expression | Clase que prueba si se genera un tipo concreto llamando a bind . |
is_placeholder | Clase que prueba si un tipo determinado es un marcador de posición. |
mem_fun_ref_t | Clase de adaptadores que permite llamar a una función miembro non_const que no toma ningún argumento como un objeto de función unaria cuando se inicializa con un argumento de referencia.(En desuso en C++11 y quitada en C++17). |
mem_fun_t | Clase de adaptadores que permite llamar a una función miembro non_const que no toma ningún argumento como un objeto de función unaria cuando se inicializa con un argumento de puntero.(En desuso en C++11 y quitada en C++17). |
mem_fun1_ref_t | Clase de adaptadores que permite llamar a una función miembro non_const que toma un solo argumento como un objeto de función binaria cuando se inicializa con un argumento de referencia.(En desuso en C++11 y quitada en C++17). |
mem_fun1_t | Clase de adaptador que permite llamar a una función miembro non_const que toma un solo argumento como un objeto de función binaria cuando se inicializa con un argumento de puntero.(En desuso en C++11 y quitada en C++17). |
pointer_to_binary_function | Convierte un puntero a función binaria en una función binaria adaptable. (En desuso en C++11 y quitada en C++17). |
pointer_to_unary_function | Convierte un puntero a función unaria en una función unaria adaptable. (En desuso en C++11 y quitada en C++17). |
reference_wrapper | Clase que contiene una referencia. |
unary_negate | Plantilla de clase que proporciona una función miembro que niega el valor devuelto de una función unaria especificada. (En desuso en C++17). |
Funciones
Nombre | Descripción |
---|---|
bind | Enlaza argumentos a un objeto al que se puede llamar. |
bind1st | Función de plantilla del asistente que crea un adaptador para convertir un objeto de función binaria en un objeto de función unaria enlazando el primer argumento de la función binaria a un valor especificado. (En desuso en C++11 y quitada en C++17). |
bind2nd | Función de plantilla del asistente que crea un adaptador para convertir un objeto de función binaria en un objeto de función unaria enlazando el segundo argumento de la función binaria a un valor especificado. (En desuso en C++11 y quitada en C++17). |
bit_and | Devuelve el AND bit a bit (elemento binario operator& ) de los dos parámetros. |
bit_not | Devuelve el complemento bit a bit (operator~ ) del parámetro.(Incluida en C++14). |
bit_or | Devuelve el OR bit a bit (operator| ) de los dos parámetros. |
bit_xor | Devuelve el XOR bit a bit (operator^ ) de los dos parámetros. |
cref | Construye un reference_wrapper const a partir de un argumento. |
invoke | |
mem_fn | Genera un contenedor de llamadas simple. |
mem_fun | Funciones de plantilla del asistente utilizadas para construir adaptadores de objeto de función para las funciones miembro cuando se inicializan con argumentos de puntero. (En desuso en C++11 y quitada en C++17). |
mem_fun_ref | Función de plantilla del asistente utilizada para construir adaptadores de objeto de función para las funciones miembro cuando se inicializan con argumentos de referencia. |
not1 | Devuelve el complemento de un predicado unario. (En desuso en C++17). |
not2 | Devuelve el complemento de un predicado binario. (En desuso en C++17). |
not_fn | Devuelve el complemento del resultado de su objeto de función. (Incluida en C++17). |
ptr_fun | Función de plantilla del asistente utilizada para convertir punteros a funciones unarias y binarias, respectivamente, en funciones unarias y binarias adaptables. (En desuso en C++11 y quitada en C++17). |
ref | Construye un reference_wrapper a partir de un argumento. |
swap | Intercambia dos objetos function . |
Estructuras
Nombre | Descripción |
---|---|
binary_function | Clase base vacía que define los tipos que puede heredar la clase derivada que proporciona un objeto de función binaria. (En desuso en C++11 y quitada en C++17). |
divides | La clase proporciona un objeto de función predefinido que realiza la operación aritmética de división sobre elementos de un tipo de valor especificado. |
equal_to | Predicado binario que prueba si un valor de un tipo especificado es igual que otro valor de ese tipo. |
greater | Predicado binario que prueba si un valor de un tipo especificado es mayor que otro valor de ese tipo. |
greater_equal | Predicado binario que prueba si un valor de un tipo especificado es mayor o igual que otro valor de ese tipo. |
less | Predicado binario que prueba si un valor de un tipo especificado es menor que otro valor de ese tipo. |
less_equal | Predicado binario que prueba si un valor de un tipo especificado es menor o igual que otro valor de ese tipo. |
logical_and | La clase proporciona un objeto de función predefinido que realiza la operación lógica de conjunción sobre elementos de un tipo de valor especificado y prueba si el resultado es verdadero o falso. |
logical_not | La clase proporciona un objeto de función predefinido que realiza la operación lógica de negación sobre elementos de un tipo de valor especificado y prueba si el resultado es verdadero o falso. |
logical_or | La clase proporciona un objeto de función predefinido que realiza la operación lógica de disyunción sobre elementos de un tipo de valor especificado y prueba si el resultado es verdadero o falso. |
minus | La clase proporciona un objeto de función predefinido que realiza la operación aritmética de resta sobre elementos de un tipo de valor especificado. |
modulus | La clase proporciona un objeto de función predefinido que realiza la operación aritmética de módulo sobre elementos de un tipo de valor especificado. |
multiplies | La clase proporciona un objeto de función predefinido que realiza la operación aritmética de multiplicación sobre elementos de un tipo de valor especificado. |
negate | La clase proporciona un objeto de función predefinido que devuelve el valor negativo de un valor de elemento. |
not_equal_to | Predicado binario que prueba si un valor de un tipo especificado no es igual que otro valor de ese tipo. |
plus | La clase proporciona un objeto de función predefinido que realiza la operación aritmética de suma sobre elementos de un tipo de valor especificado. |
unary_function | Clase base vacía que define los tipos que puede heredar la clase derivada que proporciona un objeto de función unaria. (En desuso en C++11 y quitada en C++17). |
Objetos
Nombre | Descripción |
---|---|
_1.._M | Marcadores de posición para argumentos reemplazables. |
Operadores
Nombre | Descripción |
---|---|
operator== | No permite la comparación de igualdad de objetos a los que se puede llamar. |
operator!= | No permite la comparación de desigualdad de objetos a los que se puede llamar. |
Consulte también
Referencia de archivos de encabezado
Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++