<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) cuando f es un puntero a una función miembro de clase T y t1 es un objeto de tipo T, una referencia a un objeto de tipo T o una referencia a un objeto de un tipo derivado de T.

  • ((*t1).*f)(t2, ..., tN) cuando f es un puntero a una función miembro de clase T y t1 no es uno de los tipos descritos en el elemento anterior.

  • t1.*f cuando N == 1 y f es un puntero a datos de miembro de una clase T y t1 es un objeto de tipo T, una referencia a un objeto de tipo T o una referencia a un objeto de un tipo derivado de T.

  • (*t1).*f cuando N == 1 y f es un puntero a datos de miembro de una clase T y t1 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 de T.

  • Si T es puntero a función miembros, result_type es un sinónimo para el tipo de valor devuelto de T.

  • Si T es un tipo de clase que tiene un tipo de miembro result_type, result_type es un sinónimo de T::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).

Functions

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).

Objects

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++