typeid (rozšíření komponent C++)
Načte hodnotu označující typ objektu.
Upozornění |
---|
Toto téma se vztahuje k verzi součásti rozšíření C++ typeid.ISO C++ verzi tohoto klíčového slova, viz typeid – operátor. |
Všechny moduly runtime
Syntax
T::typeid
Parametry
- T
Název typu.
Prostředí Windows Runtime
Syntax
Platform::Type^ type = T::typeid;
Parametry
- T
Název typu.
Poznámky
V C++/CX, typeid vrací Platform::Type který je vyroben z informace o typu runtime.
Požadavky
Možnost kompilátoru: /ZW
Common Language Runtime
Syntax
type::typeid
Parametry
- type
Název typu (abstraktní deklarátor), pro nějž je požadován objekt System::Type.
Poznámky
Funkce typeid slouží k načtení objektu Type pro daný typ v době kompilace.
Funkce typeid je obdobná načtení objektu System::Type pro daný typ za běhu aplikace pomocí metod GetType nebo GetType.Funkce typeid však přijímá pouze název typu jako parametr. Chcete-li pro načtení názvu System::Type použít instanci typu, použijte funkci GetType.
Funkce typeid musí být schopna vyhodnotit název typu (type) v době kompilace, zatímco funkce GetType vyhodnocuje typ, který vrátí, za běhu.
Funkce typeid může přijmout nativní název typu nebo alias modulu CLR pro daný nativní název typu; další informace naleznete v tématu .NET Framework – Ekvivalenty k nativním typům C++ (C++/CLI).
Funkce typeid funguje také s nativními typy, i když s nimi stále vrací objekt System::Type. Chcete-li načíst strukturu type_info, použijte operátor typeid – operátor.
Funkce typeid je následník operace __typeof dostupné v předchozí syntaxi jazyka /clr.
Požadavky
Možnost kompilátoru: /clr
Příklady
Příklad
Následující příklad porovnává klíčové slovo typeid s členem 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);
}
Výsledek
Příklad
Následující ukázka ilustruje, že proměnnou typu System::Type lze použít k načtení atributů typu. Také ukazuje, že u některých typů je pro využití funkce typeid zapotřebí vytvořit definici typedef.
// 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");
}
Výsledek