Objetos función
Un objeto función es cualquier objeto para el que el operador llamada a función está definido. C++ proporciona varios objetos función integrados así como apoyo para la creación y manipulación de nuevos objetos función.
[editar] Invocación de función
La operación de solo exposición Permita que el tipo
|
(desde C++11) |
std::invoke
y std::invoke_r
(desde C++23) pueden invocar cualquier objeto Callable con argumentos dados de acuerdo con la reglas de INVOKE
e INVOKE<R>
(desde C++23).
(C++17)(C++23) |
Invoca cualquier objeto Callable con los argumentos dados y la posibilidad de especificar el tipo de retorno. (desde C++23) (plantilla de función) |
[editar] Envoltorios de funciones
Estas clases envolventes polimórficas proporcionan apoyo para almacenar objetos función arbitrarios.
(C++11) |
Envuelve un objeto que puede ser llamado a cualquier tipo con la signatura de llamada a función especificada. (plantilla de clase) |
(C++23) |
Envuelve un objeto invocable de cualquier tipo con la signatura de llamada a función especificada. (plantilla de clase) |
(C++26) |
envoltura copiable de cualquier copia de objeto construible y llamable que admita calificadores en una firma de llamada determinada (plantilla de clase) |
(C++26) |
envolvente no propietaria de cualquier objeto invocable (plantilla de clase) |
(C++11) |
La excepción que se lanza cuando se invoca un objeto std::function vacío. (clase) |
(C++11) |
Crea un objeto función de un puntero a un miembro. (plantilla de función) |
[editar] Identidad
std::identity es el objeto función identidad: devuelve su argumento sin cambiarlo.
(C++20) |
Objeto función que devuelve su argumento sin cambiarlo. (clase) |
[editar] Aplicación de función parcial
std::bind_front y std::bind proporcionan apoyo para la aplicación de función parcial, es decir, la vinculación de argumentos a funciones para producir nuevas funciones.
(C++20)(C++23) |
Vincula un número variable de argumentos, en orden, a un objeto función. (plantilla de función) |
(C++11) |
Vincula uno o más argumentos a un objeto función. (plantilla de función) |
(C++11) |
Indica que un objeto es una expresión std::bind o puede usarse como tal. (plantilla de clase) |
(C++11) |
Indica que un objeto es un marcador de posición estándar o puede usarse como tal. (plantilla de clase) |
Definido en el espacio de nombres
std::placeholders | |
(C++11) |
Marcadores de posición para los argumentos no vinculados en una expresión std::bind . (constante) |
[editar] Negadores
std::not_fn crea un objeto función que niega el resultado del objeto invocable que se la pasó.
(C++17) |
Crea un objeto función que devuelve el complemento del resultado del objeto función que mantiene. (plantilla de función) |
[editar] Buscadores
Se proporcionan buscadores que implementan varios algoritmos de búsqueda de cadenas y que se pueden usar o bien directamente o con std::search.
(C++17) |
Implementación del algoritmo de búsqueda de la biblioteca estándar de C++. (plantilla de clase) |
(C++17) |
Implementación del algoritmo de búsqueda Boyer-Moore. (plantilla de clase) |
Implementación del algoritmo de búsqueda Boyer-Moore-Horspool. (plantilla de clase) |
[editar] Envoltorios de referencias
Los envoltorios de referencias permiten que los argumentos de referencia se almacenen en objetos función copiables:
(C++11) |
Envoltorio de referencia CopyConstructible y CopyAssignable. (plantilla de clase) |
(C++11)(C++11) |
Crea un envoltorio de referencia (std::reference_wrapper) con un tipo deducido de su argumento. (plantilla de función) |
(C++20)(C++20) |
Obtiene el tipo referencia envuelto en std::reference_wrapper. (plantilla de clase) |
Objetos de función transparentesLos Associative containers y los unordered associative containers (desde C++20) proporcionan operaciones de búsqueda y borredo (desde C++23) heterogéneas, pero solo están habilitados si el tipo de objeto función suministrado Todos los tipos de objetos función transparentes de la biblioteca estándar definen un tipo anidado |
(desde C++14) |
[editar] Objetos función de operador
C++ define los siguientes objetos función que representan operaciones aritméticas y lógicas comunes:
Las especializaciones void deducen sus tipos de parámetros y de retorno de sus argumentos, todas son transparentes. |
(desde C++14) |
Operaciones aritméticas | |
Objeto función que implementa x + y (plantilla de clase) | |
Objeto función que implementa x + y deduciendo el tipo del argumento y el tipo de retorno. (especialización de plantilla de clase) | |
Objeto función que implementa x - y (plantilla de clase) | |
Objeto función que implementa x - y deduciendo el tipo del argumento y el tipo de retorno (especialización de plantilla de clase) | |
Objeto función que implementa x * y (plantilla de clase) | |
Objeto función que implementa x * y deduciendo los tipos del argumento y el tipo de retorno (especialización de plantilla de clase) | |
Objeto función que implementa x / y. (plantilla de clase) | |
Objeto función que implementa x / y deduciendo los tipos del argumento y el tipo de retorno (especialización de plantilla de clase) | |
Objeto función que implementa x % y (plantilla de clase) | |
Objeto función que implementa x % y deduciendo el tipo del argumento y el tipo de retorno (especialización de plantilla de clase) | |
Objeto función que implementa -x (plantilla de clase) | |
(C++14) |
objeto de función que implementa -x deduciendo los tipos de parámetro y retorno (especialización de plantilla de clase) |
Comparaciones | |
Objeto función que implementa x == y. (plantilla de clase) | |
(C++14) |
Objeto función que implementa x == y deduciendo los tipos de parámetro y de retorno. (especialización de plantilla de clase) |
Objeto función que implementa x != y. (plantilla de clase) | |
(C++14) |
Objeto función que implementa x != y deduciendo los tipos de parámetro y de retorno. (especialización de plantilla de clase) |
Objeto función que implementa x > y. (plantilla de clase) | |
(C++14) |
Objeto función que implementa x > y deduciendo los tipos de parámetro y de retorno. (especialización de plantilla de clase) |
Objeto función que implementa x < y. (plantilla de clase) | |
(C++14) |
Función objeto que implementa x < y deduciendo los argumentos y los tipos de retorn. (especialización de plantilla de clase) |
Objeto función que implementa x >= y. (plantilla de clase) | |
(C++14) |
objeto de función que implementa x >= y deduciendo los tipos de parámetro y retorno (especialización de plantilla de clase) |
Objeto función que implementa x <= y (plantilla de clase) | |
(C++14) |
objeto de función que implementa x <= y deduciendo los tipos de parámetro y retorno (especialización de plantilla de clase) |
Operaciones lógicas | |
Objeto función que implementa x && y. (plantilla de clase) | |
(C++14) |
objeto de función que implementa x && y deduciendo los tipos de parámetro y retorno (especialización de plantilla de clase) |
Objeto función que implementa x || y. (plantilla de clase) | |
(C++14) |
objeto de función que implementa x || y deduciendo los tipos de parámetro y retorno (especialización de plantilla de clase) |
Objeto función que implementa !x. (plantilla de clase) | |
(C++14) |
objeto de función que implementa !x deduciendo los tipos de parámetro y retorno (especialización de plantilla de clase) |
Operaciones a nivel de bits | |
Objeto función que implementa x & y. (plantilla de clase) | |
(C++14) |
objeto de función que implementa x & y deduciendo tipos de parámetro y retorno (especialización de plantilla de clase) |
Objeto función que implementa x | y. (plantilla de clase) | |
(C++14) |
Objeto función que implementa x | y deduciendo tipos de parámetro y de retorno. (especialización de plantilla de clase) |
Objeto función que implementa x ^ y. (plantilla de clase) | |
(C++14) |
objeto de función que implementa x ^ y deduciendo los tipos de parámetro y retorno (especialización de plantilla de clase) |
(C++14) |
Objeto función que implementa ~x. (plantilla de clase) |
(C++14) |
Objeto función que implementa ~x deduciendo el tipo del argumento y el tipo de retorno. (especialización de plantilla de clase) |
Objetos función de comparación restringidaLos siguientes de objetos función de comparación son restringidos.
Todas estos objetos de función son transparentes.
|
(desde C++20) |
Elementos de ayudaLos siguientes elementos de solo exposición se usan para varios componentes de la biblioteca estándar, pero no son parte de la interfaz de la biblioteca estándar.
|
(desde C++26) |
Vinculadores y adaptadores antiguosVarias utilidades que brindaban soporte funcional inicialmente están obsoletas y eliminadas:
|
(hasta C++20) |
[editar] 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 185 | C++98 | el uso de objetos de función mejoró la eficiencia del programa | eliminado el reclamo |
LWG 660 | C++98 | faltaban objetos de función para operaciones de bits | añadido |
LWG 2149 | C++98 | Se requería que los objetos de función que toman uno o dos argumentos proporcionen tipos anidados para indicar los tipos de argumento y resultado |
no se requiere |
LWG 2219 | C++11 | INVOKE no manejaba correctamente std::reference_wrapper
|
se maneja correctamente |
LWG 2420 | C++11 | INVOKE<R> no descartaba el valor devuelto si R es void
|
se descarta el valor devuelto en este caso |
P0604R0 | C++11 | la sintaxis de la operación INVOKE con tipo deretorno R era INVOKE (f, t1, t2, ..., tN, R)
|
se cambia aINVOKE<R> (f, t1, t2, ..., tN)
|
LWG 3655 | C++11 | INVOKE no manejaba correctamente las unionesdebido a la resolución de Asunto LWG 2219 |
se maneja correctamente |