Compartir a través de


typeid (Extensiones de componentes de C++)

Obtiene un valor que indica el tipo de un objeto.

Todos los runtimes

kwd9abya.collapse_all(es-es,VS.110).gifSintaxis

T::typeid

kwd9abya.collapse_all(es-es,VS.110).gifParámetros

  • T
    Un nombre de tipo.

Windows en tiempo de ejecución

kwd9abya.collapse_all(es-es,VS.110).gifSintaxis

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

kwd9abya.collapse_all(es-es,VS.110).gifParámetros

  • T
    Un nombre de tipo.

kwd9abya.collapse_all(es-es,VS.110).gifComentarios

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

kwd9abya.collapse_all(es-es,VS.110).gifRequisitos

Opción del compilador: /ZW

Common Language Runtime

Sintaxis

type::typeid

Parámetros

  • tipo
    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 utilizar 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++ (C++/CLI) 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 operador typeid.

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

kwd9abya.collapse_all(es-es,VS.110).gifRequisitos

Opción del compilador: /clr

kwd9abya.collapse_all(es-es,VS.110).gifEjemplos

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);
}

Output

  
  

Ejemplo

En el ejemplo siguiente se muestra que una variable de tipo System::Type se puede usar para obtener los atributos de un tipo.También muestra que para algunos tipos, tendrá que crear una definición de tipos para utilizar 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");
}

Output

  
  
  
  
  
  
  
  

Vea también

Conceptos

Extensiones de componentes para plataformas de tiempo de ejecución