<type_traits>
Define las plantillas para las constantes en tiempo de compilación que aportan información sobre las propiedades de sus argumentos de tipo o crean tipos transformados.
Sintaxis
#include <type_traits>
Comentarios
Las clases y las plantillas de <type_traits> se usan para admitir la inferencia, clasificación y transformación de tipos en tiempo de compilación. También se usan para detectar errores relacionados con los tipos y para ayudarle a optimizar el código genérico. Los atributos del tipo unario describen una propiedad de un tipo, los atributos de tipo binario describen la relación entre los tipos y los atributos de transformación que modifican una propiedad de un tipo.
La clase asistente integral_constant
y sus especializaciones de plantilla true_type
y false_type
forman la clase base para los predicados de tipo. Un predicado de tipo es una plantilla que toma uno o más argumentos de tipo. Cuando un predicado de tipo es true, se deriva públicamente (ya sea de forma directa o indirecta) de true_type. Cuando un predicado de tipo es false, se deriva públicamente (ya sea de forma directa o indirecta) de false_type.
Un modificador de tipo o rasgo de transformación es una plantilla que toma uno o más argumentos de plantilla y tiene un miembro type
, que es un sinónimo del tipo modificado.
Plantillas de alias
Para simplificar las expresiones de los atributos de tipo, se proporcionan plantillas de alias para typename some_trait<T>::type
, donde some_trait es el nombre de clase de la plantilla. Por ejemplo, add_const tiene la plantilla de alias para su tipo add_const_t
definida así:
template <class T>
using add_const_t = typename add_const<T>::type;
Estos son los alias proporcionados para los miembros type
:
add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t
\
common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t
\
remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t
\
Clases
Definiciones de tipos y clase del asistente
Nombre | Descripción |
---|---|
integral_constant | Crea una constante entera a partir de un tipo y un valor. |
true_type | Contiene la constante integral con valor true. |
false_type | Contiene la constante integral con valor false. |
Categorías de tipo principal
Nombre | Descripción |
---|---|
is_void | Comprueba si el tipo es void . |
is_null_pointer | Comprueba si el tipo es std::nullptr_t . |
is_integral | Comprueba si el tipo es integral. |
is_floating_point | Comprueba si el tipo es un punto flotante. |
is_array | Comprueba si el tipo es una matriz. |
is_pointer | Comprueba si el tipo es un puntero. |
is_lvalue_reference | Comprueba si el tipo es una referencia a un valor L. |
is_rvalue_reference | Comprueba si el tipo es una referencia a un valor R. |
is_member_object_pointer | Comprueba si el tipo es un puntero a un objeto miembro. |
is_member_function_pointer | Comprueba si el tipo es un puntero a una función miembro. |
is_enum | Comprueba si el tipo es una enumeración. |
is_union | Comprueba si el tipo es una unión. |
is_class | Comprueba si el tipo es una clase. |
is_function | Comprueba si el tipo es un tipo de función. |
Categorías de tipo compuesto
Nombre | Descripción |
---|---|
is_reference | Comprueba si el tipo es una referencia. |
is_arithmetic | Comprueba si el tipo es aritmético. |
is_fundamental | Comprueba si el tipo es void o aritmético. |
is_object | Comprueba si el tipo es un tipo de objeto. |
is_scalar | Comprueba si el tipo es escalar. |
is_compound | Comprueba si el tipo no es escalar. |
is_member_pointer | Comprueba si el tipo es un puntero a un miembro. |
Propiedades de tipo
Nombre | Descripción |
---|---|
is_const | Comprueba si el tipo es const . |
is_volatile | Comprueba si el tipo es volatile . |
is_trivial | Comprueba si el tipo es trivial. |
is_trivially_copyable | Comprueba si el tipo se puede copiar de manera trivial. |
is_standard_layout | Comprueba si el tipo es un tipo de diseño estándar. |
is_pod | Comprueba si el tipo es POD. |
is_literal_type | Comprueba si el tipo puede ser una variable constexpr o se puede usar en una función constexpr . |
is_empty | Comprueba si el tipo es una clase vacía. |
is_polymorphic | Comprueba si el tipo es una clase polimórfica. |
is_abstract | Comprueba si el tipo es una clase abstracta. |
is_final | Comprueba si el tipo es un tipo de clase marcado como final . |
is_aggregate | |
is_signed | Comprueba si el tipo es un entero con signo. |
is_unsigned | Comprueba si el tipo es un entero sin signo. |
is_constructible | Comprueba si el tipo se puede construir con los tipos de argumento especificados. |
is_default_constructible | Comprueba si el tipo tiene un constructor predeterminado. |
is_copy_constructible | Comprueba si el tipo tiene un constructor de copia. |
is_move_constructible | Comprueba si el tipo tiene un constructor de movimiento. |
is_assignable | Comprueba si al primer tipo puede asignarse un valor del segundo tipo. |
is_copy_assignable | Comprueba si a un tipo puede asignarse un valor de referencia constante del tipo. |
is_move_assignable | Comprueba si a un tipo puede asignarse un valor de referencia R del tipo. |
is_swappable | |
is_swappable_with | |
is_destructible | Comprueba si el tipo se puede destruir. |
is_trivially_constructible | Comprueba si el tipo no usa ninguna operación no trivial cuando se construye usando los tipos especificados. |
is_trivially_default_constructible | Comprueba si el tipo no usa ninguna operación no trivial cuando se construye de manera predeterminada. |
is_trivially_copy_constructible | Comprueba si el tipo no usa ninguna operación no trivial cuando se aplica el constructor de copias. |
is_trivially_move_constructible | Comprueba si el tipo no usa ninguna operación no trivial cuando se aplica el constructor de movimiento. |
is_trivially_assignable | Comprueba si los tipos se pueden asignar y la asignación no usa ninguna operación no trivial. |
is_trivially_copy_assignable | Comprueba si el tipo se puede asignar mediante copia y la asignación no usa ninguna operación no trivial. |
is_trivially_move_assignable | Comprueba si el tipo se puede asignar mediante movimiento y la asignación no usa ninguna operación no trivial. |
is_trivially_destructible | Comprueba si se puede destruir el tipo y el destructor no usa ninguna operación no trivial. |
is_nothrow_constructible | Comprueba si el tipo se puede construir y se sabe que no se inicia cuando se construye usando los tipos especificados. |
is_nothrow_default_constructible | Comprueba si el tipo se puede construir de forma predeterminada y se sabe que no se inicia cuando se construye de forma predeterminada. |
is_nothrow_copy_constructible | Comprueba si el tipo se puede construir mediante copia y se sabe que el constructor de copias no se inicia. |
is_nothrow_move_constructible | Comprueba si el tipo se puede construir mediante movimiento y se sabe que el constructor de movimiento no se inicia. |
is_nothrow_assignable | Comprueba si el tipo se puede asignar mediante el tipo especificado y se sabe que la asignación no se inicia. |
is_nothrow_copy_assignable | Comprueba si el tipo se puede construir mediante copia y se sabe que la asignación no se inicia. |
is_nothrow_move_assignable | Comprueba si el tipo se puede asignar mediante movimiento y se sabe que la asignación no se inicia. |
is_nothrow_swappable | |
is_nothrow_swappable_with | |
is_nothrow_destructible | Comprueba si el tipo se puede destruir y se sabe que el destructor no se inicia. |
has_virtual_destructor |
Comprueba si el tipo tiene un destructor virtual. |
has_unique_object_representations |
|
is_invocable | Comprueba si se puede invocar un tipo al que se puede llamar mediante los tipos de argumentos especificados. Se incluyó en C++17. |
is_invocable_r | Comprueba si se puede invocar un tipo al que se puede llamar mediante los tipos de argumentos especificados y el resultado se pueda convertir al tipo especificado. Se incluyó en C++17. |
is_nothrow_invocable | Comprueba si se puede invocar un tipo al que se puede llamar mediante los tipos de argumentos especificados y se sabe que no inicia excepciones. Se incluyó en C++17. |
is_nothrow_invocable_r | Comprueba si se puede invocar un tipo al que se puede llamar mediante los tipos de argumentos especificados y se sabe que no inicia excepciones, y el resultado se pueda convertir al tipo especificado. Se incluyó en C++17. |
Consultas de propiedad de tipo
Nombre | Descripción |
---|---|
alignment_of | Obtiene la alineación de un tipo. |
rank | Obtiene el número de dimensiones de matriz. |
extent | Obtiene el número de elementos de la dimensión de la matriz especificada. |
Relaciones de tipos
Nombre | Descripción |
---|---|
is_same | Comprueba si dos tipos son iguales. |
is_base_of | Comprueba si un tipo es la base de otro. |
is_convertible | Comprueba si un tipo es convertible en otro. |
Modificaciones de const y volatile
Nombre | Descripción |
---|---|
add_const | Genera un tipo const a partir del tipo. |
add_volatile | Genera un tipo volatile a partir del tipo. |
add_cv | Genera un tipo const volatile a partir del tipo. |
remove_const | Genera un tipo no constante a partir del tipo. |
remove_volatile | Genera un tipo no volátil a partir del tipo. |
remove_cv | Genera un tipo no constante y no volátil a partir del tipo. |
Modificaciones de referencia
Nombre | Descripción |
---|---|
add_lvalue_reference | Genera una referencia al tipo a partir del tipo. |
add_rvalue_reference | Genera una referencia de valor R al tipo a partir del tipo. |
remove_reference | Genera un tipo sin referencia a partir del tipo. |
Modificaciones de signo
Nombre | Descripción |
---|---|
make_signed | Genera el tipo si tiene signo o el tipo con signo más pequeño igual o superior en tamaño al tipo. |
make_unsigned | Genera el tipo si no tiene signo o el tipo con signo más pequeño igual o superior en tamaño al tipo. |
Modificaciones de matriz
Nombre | Descripción |
---|---|
remove_all_extents | Genera un tipo que no es de matriz a partir de un tipo de matriz. |
remove_extent | Genera el tipo de elemento a partir de un tipo de matriz. |
Modificaciones de puntero
Nombre | Descripción |
---|---|
add_pointer | Genera un puntero al tipo a partir del tipo. |
remove_pointer | Genera un tipo a partir de un puntero al tipo. |
Otras transformaciones
Nombre | Descripción |
---|---|
aligned_storage | Asigna memoria sin inicializar para un tipo alineado. |
aligned_union | Asigna memoria sin inicializar para una unión alineada con un destructor o un constructor no trivial. |
common_type | Genera el tipo común de todos los tipos del paquete de parámetros. |
conditional | Si la condición es true, genera el primer tipo especificado, de lo contrario, el segundo tipo especificado. |
decay | Genera el tipo tal y como se pasa por valor. Crea un tipo que no es de referencia, const o volatile, o bien convierte un puntero al tipo. |
enable_if | Si la condición es true, genera el tipo especificado, de lo contrario, no genera ningún tipo. |
invoke_result | Determina el tipo de valor devuelto del tipo que se puede llamar que toma los tipos de argumento especificados. Se incluyó en C++17. |
result_of | Determina el tipo de valor devuelto del tipo que se puede llamar que toma los tipos de argumento especificados. Incluido en C++14, en desuso en C++17. |
underlying_type | Genera el tipo entero subyacente para un tipo de enumeración. |
Atributos del operador lógico
Nombre | Descripción |
---|---|
conjunción | |
disyunción | |
negación |