Se recomienda usar Visual Studio 2017

<type_traits>

 

Publicado: octubre de 2016

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Define las plantillas que proporcionan constantes en tiempo de compilación que proporcionan información acerca de las propiedades de sus argumentos de tipo o generar transforman los tipos.

#include <type_traits>  

Las clases y plantillas de <type_traits> se utilizan para admitir la inferencia de tipos, la clasificación y la transformación en tiempo de compilación para detectar errores relacionados con el tipo y que le ayudarán a optimizar el código genérico. Estas clases y las plantillas incluyen unario rasgos de tipos que describen una propiedad de un tipo de rasgos de tipo binario que describen la relación entre los tipos y características de transformación que se modifican una propiedad de un tipo.

Para admitir características de tipos, una clase auxiliar, integral_constant, se define. Tiene especializaciones de plantilla true_type y false_type que forman las clases 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 sucede, se deriva públicamente, directa o indirectamente, de true_type. Cuando un predicado de tipo contiene false, se deriva públicamente, directa o indirectamente, 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 expresiones de rasgos de tipo, plantillas de alias de typename some_trait<T>::type se proporcionan, donde " some_trait" es el nombre de clase de plantilla. Por ejemplo, add_const tiene una plantilla de alias para su tipo, add_const_t, definido como:

template <class T>
using add_const_t = typename add_const<T>::type;

add_const_taligned_storage_tmake_signed_tremove_pointer_t
add_cv_taligned_union_tmake_unsigned_tremove_reference_t
add_lvalue_reference_tcommon_type_tremove_all_extents_tremove_volatile_t
add_pointer_tconditional_tremove_const_tresult_of_t
add_rvalue_reference_tdecay_tremove_cv_tunderlying_type_t
add_volatile_tenable_if_tremove_extent_t

Clases

Definiciones de tipos y la clase auxiliar

integral_constantCrea un entero constante de un tipo y un valor.
true_typeContiene la constante integral con valor true.
false_typeContiene la constante integral con valor false.

Categorías de tipo principal

is_void)Comprueba si el tipo es void.
is_null_pointerComprueba 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_arrayComprueba 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

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

is_const)Comprueba si el tipo es const.
is_volatile)Comprueba si el tipo es volatile.
is_trivialComprueba si el tipo es trivial.
is_trivially_copyableComprueba si el tipo es copiar de forma 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_typeComprueba si el tipo puede ser un constexpr variable o usados en un constexpr (función).
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_finalComprueba si el tipo es un tipo de clase marcado final.
is_signedComprueba si el tipo es un entero con signo.
is_unsigned)Comprueba si el tipo es un entero sin signo.
is_constructibleComprueba si el tipo es puede construir con tipos de argumento especificados.
is_default_constructibleComprueba si el tipo tiene un constructor predeterminado.
is_copy_constructibleComprueba si el tipo tiene un constructor de copias.
is_move_constructibleComprueba si el tipo tiene un constructor de movimiento.
is_assignableComprueba si el primer tipo puede asignarse un valor del segundo tipo.
is_copy_assignableComprueba si se puede asignar un valor de referencia const del tipo de un tipo.
is_move_assignableComprueba si un tipo se puede asignar una referencia a valor r del tipo.
is_destructibleComprueba si el tipo es puedan destruir.
is_trivially_constructibleComprueba si el tipo no utiliza ninguna operación no trivial cuando se construye utilizando los tipos especificados.
is_trivially_default_constructibleComprueba si el tipo no utiliza ninguna operación no trivial al construir el valor predeterminado.
is_trivially_copy_constructibleComprueba si el tipo no utiliza ninguna operación no trivial al construir la copia.
is_trivially_move_constructibleComprueba si el tipo no utiliza ninguna operación no trivial al construir el movimiento.
is_trivially_assignableComprueba si los tipos asignables y la asignación utiliza ninguna operación no trivial.
is_trivially_copy_assignableComprueba si el tipo no es asignable de copia y la asignación utiliza ninguna operación no trivial.
is_trivially_move_assignableComprueba si el tipo no es asignable de movimiento y la asignación utiliza ninguna operación no trivial.
is_trivially_destructibleComprueba si el tipo es puedan destruir y el destructor no usa ninguna operación no trivial.
is_nothrow_constructibleComprueba si el tipo es construir mediante y se sabe que no inician cuando se construye utilizando los tipos especificados.
is_nothrow_default_constructiblePruebas si el tipo es default puede construir y se conoce no se produce cuando construido de forma predeterminada.
is_nothrow_copy_constructibleComprueba si el tipo es construir mediante copia y se conoce el constructor de copias no se iniciará.
is_nothrow_move_constructibleComprueba si el tipo es mover puede construir y se conoce el constructor de movimiento no se iniciará.
is_nothrow_assignableComprueba si el tipo es asignable utilizando el tipo especificado y se conoce la asignación no se iniciará.
is_nothrow_copy_assignableComprueba si el tipo es asignable de copia y se conoce la asignación no se iniciará.
is_nothrow_move_assignableComprueba si el tipo es asignable de movimiento y se conoce la asignación no se iniciará.
is_nothrow_destructibleComprueba si el tipo es puedan destruir y se conoce el destructor no se iniciará.
has_virtual_destructorComprueba si el tipo tiene un destructor virtual.

Consultas de tipo de propiedad

alignment_of)Obtiene la alineación de un tipo.
rangoObtiene el número de dimensiones de matriz.
extensiónObtiene el número de elementos de la dimensión de la matriz especificada.

Relaciones de tipo

is_same)Comprueba si dos tipos son iguales.
is_base_ofComprueba si un tipo es una base de otro.
is_convertible)Comprueba si un tipo es convertible en otro.

Modificaciones de const y volatile

add_constGenera un const tipo de tipo.
add_volatile)Genera un volatile tipo de tipo.
add_cv)Genera un const``volatile tipo de tipo.
remove_const)Genera un tipo no const de tipo.
remove_volatile)Genera un tipo no volátil de tipo.
remove_cv)Genera un tipo de no volátil no constantes de tipo.

Modificaciones de referencia

add_lvalue_referenceGenera una referencia al tipo de tipo.
add_rvalue_referenceGenera una referencia a valor r al tipo de tipo
remove_reference)Genera un tipo de referencia no es de tipo.

Modificaciones de inicio de sesión

make_signed)Genera el tipo si firma o el tipo menor con signo mayor o igual tamaño al tipo.
make_unsigned)Genera el tipo si sin signo o el tipo más pequeño sin signo mayor o igual en tamaño al tipo.

Modificaciones de la matriz

remove_all_extents)Genera un tipo de matriz no es de un tipo de matriz.
remove_extent)Genera el tipo de elemento de un tipo de matriz.

Modificaciones de puntero

add_pointer)Genera un puntero al tipo de tipo.
remove_pointer)Genera un tipo de un puntero al tipo.

Otras transformaciones

aligned_storage)Asigna memoria sin inicializar para un tipo alineado.
aligned_unionAsigna memoria sin inicializar para una unión alineada con un destructor o un constructor no trivial.
common_typeGenera el tipo común de todos los tipos de paquete de parámetros.
condicionalSi la condición es true, produce el primer tipo especificado, de lo contrario, el segundo tipo especificado.
DecayGenera el tipo tal y como se pasan 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, no genera el tipo especificado, de lo contrario, ningún tipo.
result_of)Determina el tipo de valor devuelto del tipo que se puede llamar que toma los tipos de argumento especificados.
underlying_typeGenera el tipo entero subyacente para un tipo de enumeración.

<>>

Mostrar: