typeid (C++/CLI e C++/CX)
Ottiene un valore che indica il tipo di un oggetto.
Nota
In questo argomento viene fatto riferimento alla versione Estensioni componenti C++ di typeid. Per la versione C++ ISO di questa parola chiave, vedere Operatore typeid.
Tutti i runtime
Sintassi
T::typeid
Parametri
T
Un nome di tipo.
Windows Runtime
Sintassi
Platform::Type^ type = T::typeid;
Parametri
T
Un nome di tipo.
Osservazioni:
In C++/CX typeid restituisce un oggetto Platform::Type costruito dalle informazioni sul tipo di runtime.
Requisiti
Opzione del compilatore: /ZW
Common Language Runtime
Sintassi
System::Type^ type = T::typeid;
Parametri
type
Nome di un tipo (dichiaratore astratto) per il quale si vuole ottenere l'oggetto System::Type
.
Osservazioni:
typeid
si usa per ottenere l'oggetto Type per un tipo in fase di compilazione.
typeid
è simile al recupero di System::Type
per un tipo in fase di esecuzione tramite GetType o GetType. Tuttavia, typeid
accetta solo un nome di tipo come parametro. Se si vuole usare un'istanza di un tipo per ottenere il nome System::Type
, usare GetType
.
typeid
deve essere in grado di valutare un nome di tipo (type) in fase di compilazione, mentre GetType valuta il tipo da restituire in fase di esecuzione.
typeid
può accettare un nome di tipo nativo o un alias di Common Language Runtime per il nome di tipo nativo. Per altre informazioni, vedere Equivalenti di .NET Framework a tipi nativi C++ (C++/CLI).
typeid
funziona anche con i tipi nativi, anche se restituirà comunque un oggetto System::Type
. Per ottenere una struttura type_info, usare typeid
Operator.
Requisiti
Opzione del compilatore: /clr
Esempi
L'esempio seguente confronta la parola chiave typeid con il membro 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*
L'esempio seguente mostra che una variabile di tipo System::Type può essere usata per ottenere gli attributi in un tipo. Illustra anche che per alcuni tipi è necessario creare un oggetto typedef per usare 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