typeid (Extensiones de componentes de C++)

 

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

Obtiene un valor que indica el tipo de un objeto.

System_CAPS_ICON_warning.jpg Advertencia

Este tema hace referencia a la versión de extensiones de componentes de C++ de typeid. Para obtener la versión ISO de C++ de esta palabra clave, vea typeid (Operador).

Sintaxis

  
T::typeid  

Parámetros

T
Nombre de tipo.

Sintaxis

Platform::Type^ type = T::typeid;  

Parámetros

T
Nombre de tipo.

Comentarios

En C++/CX, typeid devuelve Platform::Type que se construye a partir de la información de tipo de runtime.

Requisitos

Opción del compilador: /ZW

Sintaxis

  
type::typeid  

Parámetros

type
El nombre de un tipo (declarador abstracto) para el que desea usar el objeto System::Type.

Comentarios

typeid se usa para obtener Type para un tipo en tiempo de compilación.

typeid es similar a obtener System::Type para un tipo en tiempo de ejecución mediante GetType o GetType. Sin embargo, typeid solo acepta un nombre de tipo como parámetro. Si desea usar una instancia de un tipo para obtener su System::Type name, use GetType.

typeid debe poder evaluar un nombre de tipo (type) en tiempo de compilación, mientras que GetType evalúa el tipo que se va a devolver en tiempo de ejecución.

typeid puede tomar un nombre de tipo nativo o un alias nativo de Common Language Runtime para el nombre de tipo nativo; vea .Equivalentes de .NET Framework para tipos nativos de C++ para obtener más información.

typeid también funciona con los tipos nativos, aunque todavía devuelve System::Type. Para obtener una estructura type_info, use typeid (Operador).

typeid es el sucesor de __typeof en la sintaxis anterior de /clr.

Requisitos

Opción del compilador: /clr

Ejemplos

Ejemplo

El ejemplo siguiente compara la palabra clave typeid con el miembro GetType().

// keyword__typeid.cpp  
// compile with: /clr  
using namespace System;  
  
ref struct G {  
   int i;  
};  
  
int main() {  
   G ^ pG = gcnew G;  
   Type ^ pType = pG->GetType();  
   Type ^ pType2 = G::typeid;  
  
   if (pType == pType2)  
      Console::WriteLine("typeid and GetType returned the same System::Type");  
   Console::WriteLine(G::typeid);  
  
   typedef float* FloatPtr;  
   Console::WriteLine(FloatPtr::typeid);  
}  

Resultados

typeid and GetType returned the same System::Type
G
System.Single* Ejemplo

En el ejemplo siguiente se muestra que se puede usar una variable de tipo System::Type para obtener los atributos de un tipo. También muestra que para algunos tipos, tendrá que crear una definición de tipos para usar typeid.

// keyword__typeid_2.cpp  
// compile with: /clr  
using namespace System;  
using namespace System::Security;  
using namespace System::Security::Permissions;  
  
typedef int ^ handle_to_int;  
typedef int * pointer_to_int;  
  
public ref class MyClass {};  
  
class MyClass2 {};  
  
[attribute(AttributeTargets::All)]  
ref class AtClass {  
public:  
   AtClass(Type ^) {  
      Console::WriteLine("in AtClass Type ^ constructor");  
   }  
};  
  
[attribute(AttributeTargets::All)]  
ref class AtClass2 {  
public:  
   AtClass2() {  
      Console::WriteLine("in AtClass2 constructor");  
   }  
};  
  
// Apply the AtClass and AtClass2 attributes to class B  
[AtClass(MyClass::typeid), AtClass2]     
[AttributeUsage(AttributeTargets::All)]  
ref class B : Attribute {};  
  
int main() {  
   Type ^ MyType = B::typeid;  
  
   Console::WriteLine(MyType->IsClass);  
  
   array<Object^>^ MyArray = MyType -> GetCustomAttributes(true);  
   for (int i = 0 ; i < MyArray->Length ; i++ )  
      Console::WriteLine(MyArray[i]);  
  
   if (int::typeid != pointer_to_int::typeid)  
      Console::WriteLine("int::typeid != pointer_to_int::typeid, as expected");  
  
   if (int::typeid == handle_to_int::typeid)  
      Console::WriteLine("int::typeid == handle_to_int::typeid, as expected");  
}  

Resultados

True
in AtClass2 constructor
in AtClass Type ^ constructor
AtClass2
System.AttributeUsageAttribute
AtClass
int::typeid != pointer_to_int::typeid, as expected
int::typeid == handle_to_int::typeid, as expected

Extensiones de componentes para plataformas de tiempo de ejecución

Mostrar: