Metaprogramming library
C++ proporciona funciones de metaprogramación, como rasgos de tipo, aritmética racional en tiempo de compilación y secuencias de enteros en tiempo de compilación.
Contenido |
[editar] Propiedad tipo
Estos rasgos de tipo definen interfaces basadas en plantillas en tiempo de compilación para consultar las propiedades de los tipos.
Intentar especializar una plantilla definida en el encabezado <type_traits> y descrito en esta sección da como resultado un comportamiento no definido.
Se puede crear una instancia de una plantilla definida en el encabezado <type_traits> con un tipo incompleto a menos que se especifique lo contrario, sin perjuicio de la prohibición general de crear instancias de plantillas de biblioteca estándar con tipos incompletos.
| Definido en el archivo de encabezado
<type_traits> | |
Categorías de tipo primarias | |
| (C++11) |
Comprueba si un tipo es void (plantilla de clase) |
| (C++14) |
Comprueba si un tipo es std::nullptr_t (plantilla de clase) |
| (C++11) |
Comprueba si un tipo T es entero. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo T es de punto flotante (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo array (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo enumeración (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo unión (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo clase (pero no un tipo unión). (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo función (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo puntero (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es una referencia lvalue. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es una referencia rvalue. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un puntero a un objeto miembro no estático (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un puntero a una función miembro no estática (plantilla de clase) |
Categorías de tipo compuestas | |
| (C++11) |
Comprueba si un tipo es un tipo fundamental (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es de tipo aritmético Original: checks if a type is arithmetic type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es de tipo escalar Original: checks if a type is scalar type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo objeto (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es de tipo compuesto Original: checks if a type is compound type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es o bien una referencia lvalue o una referencia rvalue (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un puntero a una función miembro no estática o a un objeto miembro no estático. (plantilla de clase) |
Propiedades de tipos | |
| (C++11) |
Comprueba si un tipo está calificado con el calificador const (plantilla de clase) |
| (C++11) |
Comprueba si un tipo está calificado con el calificador volatile (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es trivial Original: checks if a type is trivial The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es trivialmente copiable. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo de diseño estándar. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo simple (POD). (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo literal. (plantilla de clase) |
| Comprueba si cada bit en la representación de objeto del tipo contribuye a su valor. (plantilla de clase) | |
| (C++11) |
Comprueba si un tipo es un tipo de clase que no es una unión y no tiene datos. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es tipo clase polimórfico (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es el tipo de clase abstracta Original: checks if a type is abstract class type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++14) |
Comprueba si un tipo es un tipo de clase final. (plantilla de clase) |
| (C++17) |
Comprueba si un tipo es un tipo de agregado. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es un tipo aritmético con signo. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es el tipo de aritmética sin signo Original: checks if a type is unsigned arithmetic type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++20) |
Comprueba si un tipo es un tipo de array de límite conocido. (plantilla de clase) |
| (C++20) |
Comprueba si un tipo es un tipo de array de límite desconocido. (plantilla de clase) |
| (C++23) |
Comprueba si un tipo es un tipo enumeración con ámbito (plantilla de clase) |
Operaciones admitidas | |
| (C++11)(C++11)(C++11) |
Comprueba si un tipo tiene un constructor de argumentos concretos Original: checks if a type has a constructor for specific arguments The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| Comprueba si un tipo tiene un constructor por defecto Original: checks if a type has a default constructor The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) | |
| (C++11)(C++11)(C++11) |
Comprueba si un tipo tiene un constructor de copia Original: checks if a type has a copy constructor The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11)(C++11)(C++11) |
Comprueba si un tipo tiene un constructor de movimiento Original: checks if a type has a move constructor The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11)(C++11)(C++11) |
Comprueba si un tipo tiene un operador de asignación para un argumento específico Original: checks if a type has a assignment operator for a specific argument The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11)(C++11)(C++11) |
Comprueba si un tipo tiene un operador de asignación de copia Original: checks if a type has a copy assignment operator The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11)(C++11)(C++11) |
Comprueba si un tipo tiene un operador de asignación de movimiento Original: checks if a type has a move assignment operator The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11)(C++11)(C++11) |
Comprueba si un tipo tiene un destructor no eliminado Original: checks if a type has a non-deleted destructor The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++11) |
Comprueba si un tipo tiene un destructor virtual Original: checks if a type has a virtual destructor The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
| (C++17)(C++17)(C++17)(C++17) |
Comprueba si objetos de un tipo pueden intercambiarse con objetos del mismo tipo o diferente tipo. (plantilla de clase) |
Consultas de propiedades | |
| (C++11) |
Obtiene los requisitos de alineación del tipo (plantilla de clase) |
| (C++11) |
Obtiene el número de dimensiones de un tipo array (plantilla de clase) |
| (C++11) |
Obtiene el tamaño de un tipo array a lo largo de una dimensión especificada (plantilla de clase) |
Relaciones de tipos | |
| (C++11) |
Comprueba si dos tipos son los mismos (plantilla de clase) |
| (C++11) |
Comprueba si un tipo es derivado de otro tipo (plantilla de clase) |
| (C++11)(C++20) |
Comprueba si un tipo puede convertirse a otro tipo. (plantilla de clase) |
| Comprueba si un tipo puede invocarse (como si lo fuera por std::invoke) con el número de argumentos dado. (plantilla de clase) | |
| Comprueba si una referencia está vinculada a un temporal en la inicialización directa. (plantilla de clase) | |
| Comprueba si una referencia está vinculada a un temporal en la inicialización por copia. (plantilla de clase) | |
| (C++20) |
Comprueba si dos tipos tienen diseño compatible. (plantilla de clase) |
| Comprueba si un tipo es una base (inicial) interconvertible-por-puntero a otro tipo. (plantilla de clase) | |
| Comprueba si los objetos de un tipo son interconvertibles-por-puntero con el subobjeto especificado de ese tipo. (plantilla de función) | |
| (C++20) |
Comprueba si dos miembros especificados se corresponden mutuamente en la subsecuencia inicial común de dos tipos especificados. (plantilla de función) |
[editar] Operaciones en los rasgos
| Definido en el archivo de encabezado
<type_traits> | |
| (C++17) |
Metafunción variádica de AND lógico. (plantilla de clase) |
| (C++17) |
Metafunción variádica de OR lógico. (plantilla de clase) |
| (C++17) |
Metafunción NOT lógico. (plantilla de clase) |
[editar] Clases base
| Definido en el archivo de encabezado
<type_traits> | |
| (C++11) |
Constante en tiempo de compilación del tipo especificado con el valor especificado. (plantilla de clase) |
Se proporcionan dos especializaciones de std::integral_constant para el tipo bool:
| Definido en el archivo de encabezado
<type_traits> | |
Especializaciones | |
| Tipo | Definición |
true_type
|
std::integral_constant<bool, true> |
false_type
|
std::integral_constant<bool, false> |
[editar] Modificaciones de tipos
Estos rasgos de tipo aplican modificaciones en un parámetro de plantilla y declaran (a veces condicionalmente) la definición de tipo miembro type como el tipo resultante.
Intentar especializar una plantilla definida en el encabezado <type_traits> y descrita en esta sección da como resultado un comportamiento no definido, excepto que std::common_type y std::basic_common_reference (desde C++20) pueden especializarse según lo requiera la descripción.
Se puede crear una instancia de una plantilla definida en el encabezado <type_traits> con un tipo incompleto a menos que se especifique lo contrario, sin perjuicio de la prohibición general de crear instancias de plantillas de biblioteca estándar con tipos incompletos.
| Definido en el archivo de encabezado
<type_traits> | |
Const-volatility specifiers | |
| (C++11)(C++11)(C++11) |
Elimina los especificadores const y/o volatile del tipo dado. (plantilla de clase) |
| (C++11)(C++11)(C++11) |
Agrega los especificadores const y/o volatile al tipo dado (plantilla de clase) |
Referencias | |
| (C++11) |
Elimina la referencia de un tipo dado. (plantilla de clase) |
| (C++11)(C++11) |
Añade referencia lvalue o rvalue al tipo dado. (plantilla de clase) |
Punteros | |
| (C++11) |
Elimina el puntero del tipo dado (plantilla de clase) |
| (C++11) |
Agrega puntero al tipo dado (plantilla de clase) |
Modificadores de signo | |
| (C++11) |
Hace al tipo entero dado con signo (plantilla de clase) |
| (C++11) |
Hace al tipo entero dado sin signo (plantilla de clase) |
Arrays | |
| (C++11) |
Elimina una dimensión del tipo array dado (plantilla de clase) |
| (C++11) |
Elimina todas las dimensiones del tipo array dado (plantilla de clase) |
[editar] Transformaciones misceláneas
| Definido en el archivo de encabezado
<type_traits> | |
| (C++11) |
Define el tipo adecuado para su uso como almacenamiento sin inicializar para tipos de un tamaño dado (plantilla de clase) |
| (C++11) |
Define el tipo adecuado para su uso como almacenamiento sin inicializar para todos los tipos dados (plantilla de clase) |
| (C++11) |
Aplica transformaciones de tipo como se cuando pasa un argumento de función por valor (plantilla de clase) |
| (C++20) |
Combina std::remove_cv y std::remove_reference. (plantilla de clase) |
| (C++11) |
Esconde una sobrecarga de función o especialización de plantilla basada en un valor Booleano en tiempo de compilación (plantilla de clase) |
| (C++11) |
Escoge un tipo u otro basado un tipo Booleano en tiempo de compilación (plantilla de clase) |
| (C++11) |
Deduce el tipo del resultado de una expresión aritmética mixta (plantilla de clase) |
| Determina el tipo común de referencia de un grupo de tipos (plantilla de clase) | |
| (C++11) |
Obtiene el tipo subyacente entero para un tipo enumeración dado (plantilla de clase) |
| (C++11) |
Deduce el tipo de retorno de una expresión de llamada a la función. (plantilla de clase) |
| (C++17) |
Plantilla de alias void variádica. (plantilla de alias) |
| (C++20) |
Devuelve el argumento del tipo sin modificarlo. (plantilla de clase) |
[editar] Aritmética racional en tiempo de compilación
El encabezado <ratio> proporciona tipos y funciones para manipular y almacenar razones matemáticas en tiempo de compilación.
[editar] Secuencias de enteros en tiempo de compilación
| Definido en el archivo de encabezado
<utility> | |
| (C++14) |
Implementa una secuencia de enteros en tiempo de compilación. (plantilla de clase) |

