Compatibilidad de compilador para type traits (Extensiones de componentes de C++)
El compilador admite los rasgos de tipo, que indican diversas características de un tipo en tiempo de compilación.
Todos los runtimes
Comentarios
Los rasgos de tipo son especialmente útiles para los programadores que escriben las bibliotecas.
La tabla siguiente se enumeran los rasgos de tipo admitidos por el compilador.Todos los rasgos escritos devuelven false si la condición especificada con el nombre de característica de tipo no se cumple.
(En la columna de la tabla, ejemplos de código se escriben sólo en C++/CLI.Pero el rasgo cuyas corresponde también se admite en Extensiones de componentes de Visual C++ a menos que se indique lo contrario.El término “, plataforma tipo” hace referencia a los tipos de Windows en tiempo de ejecución o tipos de Common Language Runtime).
Rasgo de tipo |
Descripción |
---|---|
__has_assign(type) |
Devuelve true si el tipo de plataforma o nativo tiene un operador de asignación de copia.
|
__has_copy(type) |
Devuelve true si el tipo de plataforma o nativo tiene un constructor de copia.
|
__has_finalizer(type) |
(No se admite en Extensiones de componentes de Visual C++.) Devuelve true si el tipo de CLR tiene un finalizador.Para obtener más información, consulte Destructores y Finalizadores en Visual C++.
|
__has_nothrow_assign(type) |
Devuelve true si un operador de asignación de copia tiene una especificación vacía de la excepción.
|
__has_nothrow_constructor(type) |
Devuelve true si el constructor predeterminado tiene una especificación vacía de la excepción.
|
__has_nothrow_copy(type) |
Devuelve true si el constructor de copias tiene una especificación vacía de la excepción.
|
__has_trivial_assign(type) |
Devuelve true si el tipo tiene un operador de asignación trivial, generado por el compilador.
|
__has_trivial_constructor(type) |
Devuelve true si el tipo tiene un constructor trivial, generado por el compilador.
|
__has_trivial_copy(type) |
Devuelve true si el tipo tiene un constructor trivial, generados de copia.
|
__has_trivial_destructor(type) |
Devuelve true si el tipo tiene un destructor trivial, generado por el compilador.
|
__has_user_destructor(type) |
Devuelve true si el tipo de plataforma o nativas destructor usuario-declarado.
|
__has_virtual_destructor(type) |
Devuelve true si el tipo tiene un destructor virtual. __has_virtual_destructor también funciona en tipos de plataforma, y cualquier un destructor definido por el usuario en un tipo de plataforma es un destructor virtual.
|
__is_abstract(type) |
Devuelve true si el tipo es un tipo abstracto.Para obtener más información sobre tipos de resumen nativo, vea abstract (Extensiones de componentes de C++). __is_abstract también funciona con los tipos de la plataforma.Una interfaz con al menos un miembro es un tipo abstracto, así como un tipo de referencia con al menos un miembro abstracto.Para obtener más información sobre tipos abstractos de la plataforma, vea Clases abstractas (C++)
|
__is_base_of(base,derived) |
Devuelve true si el primer tipo es una clase base del segundo tipo, si ambos tipos son iguales. __is_base_of también funciona en tipos de la plataforma.Por ejemplo, devolverá true si el primer tipo es interface class (Extensiones de componentes de C++) y el segundo tipo implementa la interfaz.
|
__is_class(type) |
Devuelve true si typ es una clase o struct nativa.
|
__is_convertible_to(from, to) |
Devuelve true si el primer tipo se puede convertir al segundo tipo.
|
__is_delegate(type) |
Devuelve true si type es un delegado.Para obtener más información, vea delegate (Extensiones de componentes de C++).
|
__is_empty(type) |
Devuelve true si el tipo no tiene ningún miembro de datos de la instancia.
|
__is_enum(type) |
Devuelve true si typ es una enumeración nativo.
|
__is_interface_class(type) |
Devuelve true si se pasa una interfaz de la plataforma.Para obtener más información, vea interface class (Extensiones de componentes de C++).
|
__is_pod(type) |
Devuelve true si typ es una clase o una unión sin constructor o los miembros no estáticos private o protected, ninguna clase base, ni funciones virtuales.Vea el estándar de C++, las secciones 8.5.1/1, el 9/4, y los 3.9/10 para obtener más información sobre PODs. __is_pod devolverá false en tipos fundamentales.
|
__is_polymorphic(type) |
Devuelve true si un tipo nativo tiene funciones virtuales.
|
__is_ref_array(type) |
Devuelve true si se pasa una matriz de la plataforma.Para obtener más información, vea Matrices (Extensiones de componentes de C++).
|
__is_ref_class(type) |
Devuelve true si se pasa una clase de referencia.Para obtener más información sobre los tipos de referencia definido por el usuario, vea Clases y structs (Extensiones de componentes de C++).
|
__is_sealed(type) |
Devuelve true si se pasa una plataforma o código escribe marcado sealed.Para obtener más información, vea sealed (Extensiones de componentes de C++).
|
__is_simple_value_class(type) |
Devuelve true si se pasa un tipo de valor que no contiene ninguna referencia a la pila de recolección de elementos no utilizados.Para obtener más información sobre los tipos de valor definido por el usuario, vea Clases y structs (Extensiones de componentes de C++).
|
__is_union(type) |
Devuelve true si un tipo es una unión.
|
__is_value_class(type) |
Devuelve true si se pasa un tipo de valor.Para obtener más información sobre los tipos de valor definido por el usuario, vea Clases y structs (Extensiones de componentes de C++).
|
Windows en tiempo de ejecución
Comentarios
El rasgo de tipo de __has_finalizer(tipo) no se admite porque esta plataforma no admite finalizadores.
Requisitos
Opción del compilador: /ZW
Common Language Runtime
Comentarios
(No hay notas específicas de la plataforma para esta característica).
Requisitos
Opción del compilador: /clr
Ejemplos
Ejemplo
El ejemplo de código siguiente muestra cómo utilizar una plantilla de clase para exponer un rasgo de tipo de compilador de una compilación de /clr .Para obtener más información, vea Windows en tiempo de ejecución y plantillas administradas (Extensiones de componentes de C++).
// compiler_type_traits.cpp
// compile with: /clr
using namespace System;
template <class T>
ref struct is_class {
literal bool value = __is_ref_class(T);
};
ref class R {};
int main () {
if (is_class<R>::value)
Console::WriteLine("R is a ref class");
else
Console::WriteLine("R is not a ref class");
}
Output
Vea también
Conceptos
Extensiones de componentes para plataformas de tiempo de ejecución