typeid (C++/CLI a C++/CX)
Získá hodnotu, která označuje typ objektu.
Poznámka:
Toto téma se týká verze typeid rozšíření komponent C++. Informace o verzi ISO C++ tohoto klíčového slova naleznete v části typeid – operátor.
Všechny moduly runtime
Syntaxe
T::typeid
Parametry
T
Název typu.
prostředí Windows Runtime
Syntaxe
Platform::Type^ type = T::typeid;
Parametry
T
Název typu.
Poznámky
V C++/CX vrátí typeid Platform::Type vytvořený z informací o typu modulu runtime.
Požadavky
Možnost kompilátoru: /ZW
CLR (Common Language Runtime)
Syntaxe
System::Type^ type = T::typeid;
Parametry
type
Název typu (abstraktní deklarátor), pro který chcete objekt použít System::Type
.
Poznámky
typeid
slouží k získání Type typu v době kompilace.
typeid
se podobá získání System::Type
typu za běhu pomocí GetType nebo GetType. typeid
Jako parametr však přijímá pouze název typu. Pokud chcete k získání názvu System::Type
použít instanci typu, použijte GetType
.
typeid
musí být schopen vyhodnotit název typu (typ) v době kompilace, zatímco GetType vyhodnotí typ, který se má vrátit za běhu.
typeid
může pro název nativního typu použít název nativního typu nebo alias modulu CLR (Common Language Runtime). Další informace najdete v tématu .NET Framework Ekvivalenty nativních typů C++ (C++/CLI).
typeid
také funguje s nativními typy, i když bude stále vracet System::Type
. Pokud chcete získat strukturu type_info, použijte typeid
operátor.
Požadavky
Možnost kompilátoru: /clr
Příklady
Následující příklad porovnává klíčové slovo typeid se GetType()
členem.
// 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*
Následující ukázka ukazuje, že proměnná typu System::Type se dá použít k získání atributů typu. Ukazuje také, že u některých typů budete muset vytvořit typedef, který se má použít 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