typeid (Estensioni del componente C++)
Ottiene un valore che indica il tipo di un oggetto.
Avviso
Questo articolo si riferisce alla versione Estensioni Componenti C++ di typeid.Per la versione dello standard ISO di C++ di questa parola chiave, vedere Operatore typeid.
Tutti i runtime
Sintassi
T::typeid
Parametri
- T
Un tipo di nome.
Windows Runtime
Sintassi
Platform::Type^ type = T::typeid;
Parametri
- T
Un tipo di nome.
Note
In C++/CX, typeid restituisce Platform::Type che viene costruito con le informazioni sui tipi in fase di esecuzione.
Requisiti
Opzione del compilatore: /ZW
Common Language Runtime
Sintassi
type::typeid
Parametri
- type
Il nome di un tipo (dichiaratore astratto) per il quale si desidera l'oggetto System::Type.
Note
typeid viene utilizzato per ottenere Type per un tipo in fase di compilazione.
typeid ottiene in modo simile System::Type per un tipo in fase di esecuzione rispetto a GetType o GetType. Tuttavia, typeid accetta un solo nome del tipo come parametro. Se si desidera utilizzare un'istanza di un tipo per ottenere il nome System::Type, utilizzare GetType.
typeid deve essere in grado di valutare un nome del tipo (tipo) in fase di compilazione, mentre GetType valuta il tipo che deve essere restituito in fase di esecuzione.
typeid può accettare un alias per il nome del tipo nativo o un alias di Common Language Runtime per il nome del tipo nativo; vedere la pagina Equivalenti di .NET Framework a tipi nativi C++ (C++/CLI) per ulteriori informazioni.
typeid è applicabile anche ai tipi nativi, sebbene sia ancora restituito un System::Type. Per ottenere una struttura type_info, utilizzare Operatore typeid.
typeid è il successore di __typeof nella precedente sintassi /clr.
Requisiti
Opzione del compilatore: /clr
Esempi
Esempio
Nell'esempio seguente vengono confrontate la parola chiave typeid e 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);
}
Output
Esempio
Nell'esempio seguente viene illustrata una variabile di tipo System::Type che può essere utilizzata per ottenere gli attributi su un tipo. Mostra inoltre che per alcuni tipi, è necessario creare un typedef per utilizzare 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