typeid (C++/CLI y C++/CX)
Obtiene un valor que indica el tipo de un objeto.
Nota:
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, consulte typeid (Operador).
Todos los runtimes
Sintaxis
T::typeid
Parámetros
T
Nombre de tipo.
Windows en tiempo de ejecución
Sintaxis
Platform::Type^ type = T::typeid;
Parámetros
T
Nombre de tipo.
Comentarios
En C++/CX, typeid devuelve una clase Platform::Type que se construye a partir de la información de tipo de runtime.
Requisitos
Opción del compilador: /ZW
Common Language Runtime
Sintaxis
System::Type^ type = T::typeid;
Parámetros
type
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 GetType para un tipo en tiempo de ejecución mediante System::Type
o GetType. Sin embargo, typeid
solo acepta un nombre de tipo como parámetro. Si quiere usar una instancia de un tipo para obtener el nombre de System::Type
, 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; consulte el artículo sobre los 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 el operador typeid
.
Requisitos
Opción del compilador: /clr
Ejemplos
En el siguiente ejemplo se 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);
}
typeid and GetType returned the same System::Type
G
System.Single*
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");
}
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