<functional>
Define funciones de la biblioteca estándar que ayudan a construir objetos de función, también denominados functors, 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.
#include <functional>
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 a 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 STL. 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. El estándar de C++ requiere implementar esta adaptabilidad haciendo que todas las clases de objetos estándar hereden de las clases base unary_function o binary_function. Los objetos de función y sus adaptadores permiten que la STL actualice aplicaciones existentes y ayudan a integrar la STL en el entorno de programación de C++.
La implementación de Visual C++ de los objetos de función en <functional> incluye funciones de operador transparentes, que son especializaciones de los objetos de función estándar y no toman ningún parámetro de plantilla, y realizan el reenvío directo de los argumentos de función y la devolución perfecta del resultado. Esta característica forma parte de la especificación del borrador del estándar C++14. 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 explícitamente el tipo sort(my_collection.begin(), my_collection.end(), less<MyType>()).
Implementación de C++11/C++14
Se han agregado las características siguientes en la implementación de Visual C++ de C++11/C++14:
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 puntero a función, puntero a función miembro, un puntero a datos de miembro o un tipo de clase cuyos objetos pueden aparecer inmediatamente 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.
Clases
Clase que describe una excepción iniciada para indicar que se produjo un error en una llamada a operator() en un objeto function porque el objeto estaba vacío. |
|
Clase de plantilla que proporciona una función miembro que niega el valor devuelto de una función binaria especificada. |
|
Clase de plantilla 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. |
|
Clase de plantilla 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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
Clase que contiene un objeto al que se puede llamar. |
|
Clase que calcula un código hash para un valor. |
|
Clase que prueba si se genera un tipo concreto llamando a bind. |
|
Clase que prueba si un tipo determinado es un marcador de posición. |
|
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. |
|
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. |
|
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. |
|
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 puntero. |
|
Convierte un puntero a función binaria en una función binaria adaptable. |
|
Convierte un puntero a función unaria en una función unaria adaptable. |
|
Clase que contiene una referencia. |
|
Struct que contiene el tipo de valor devuelto de un objeto contenido al que se puede llamar. |
|
Clase de plantilla que proporciona una función miembro que niega el valor devuelto de una función unaria especificada. |
Funciones
Enlaza argumentos a un objeto al que se puede llamar. |
|
Función de plantilla auxiliar 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. |
|
Función de plantilla auxiliar 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. |
|
Devuelve el AND lógico bit a bit (operador binario&) de los dos parámetros. |
|
Devuelve el complemento lógico bit a bit (operador~) del parámetro. |
|
Devuelve el OR lógico bit a bit (operador |) de los dos parámetros. |
|
Devuelve el XOR lógico bit a bit (operador ^) de los dos parámetros. |
|
Construye un reference_wrapper const a partir de un argumento. |
|
Genera un contenedor de llamadas simple. |
|
Funciones de plantilla auxiliar utilizadas para construir adaptadores de objeto de función para las funciones miembro cuando se inicializan con argumentos de puntero. |
|
Función de plantilla auxiliar utilizada para construir adaptadores de objeto de función para las funciones miembro cuando se inicializan con argumentos de referencia. |
|
Devuelve el complemento de un predicado unario. |
|
Devuelve el complemento de un predicado binario. |
|
Función de plantilla auxiliar utilizada para convertir punteros a funciones unarias y binarias, respectivamente, en funciones unarias y binarias adaptables. |
|
Construye un reference_wrapper a partir de un argumento. |
|
Intercambia dos objetos function. |
Structs
Clase base vacía que define los tipos que puede heredar la clase derivada que proporciona un objeto de función binaria. |
|
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. |
|
Predicado binario que prueba si un valor de un tipo especificado es igual que otro valor de ese tipo. |
|
Predicado binario que prueba si un valor de un tipo especificado es mayor que otro valor de ese tipo. |
|
Predicado binario que prueba si un valor de un tipo especificado es mayor o igual que otro valor de ese tipo. |
|
Predicado binario que prueba si un valor de un tipo especificado es menor que otro valor de ese tipo. |
|
Predicado binario que prueba si un valor de un tipo especificado es menor o igual que otro valor de ese tipo. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
La clase proporciona un objeto de función predefinido que devuelve el valor negativo de un valor de elemento. |
|
Predicado binario que prueba si un valor de un tipo especificado no es igual que otro valor de ese tipo. |
|
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. |
|
Clase base vacía que define los tipos que puede heredar la clase derivada que proporciona un objeto de función unaria. |
Objetos
Marcadores de posición para argumentos reemplazables. |
Operadores
No permite la comparación de igualdad de objetos a los que se puede llamar. |
|
No permite la comparación de desigualdad de objetos a los que se puede llamar. |
Vea también
Referencia
Seguridad para subprocesos en la biblioteca estándar de C++
Biblioteca de plantillas estándar