typeid (C++/CLI und C++/CX)
Ruft einen Wert ab, der den Typ eines Objekts angibt.
Hinweis
Dieses Thema behandelt die C++-Komponentenerweiterungsversion von "typeid". Die ISO C++-Version dieses Schlüsselworts finden Sie unter typeid-Operator.
Alle Laufzeiten
Syntax
T::typeid
Parameter
T
Ein Typname.
Windows-Runtime
Syntax
Platform::Type^ type = T::typeid;
Parameter
T
Ein Typname.
Hinweise
In C++/CX gibt „typeid“ einen Platform::Type zurück, der aus Runtimetypinformationen erstellt wird.
Anforderungen
Compileroption: /ZW
Übersicht: Common Language Runtime (CLR)
Syntax
System::Type^ type = T::typeid;
Parameter
type
Der Name eines Typs (abstrakter Deklarator), für den das System::Type
-Objekt gelten soll.
Hinweise
typeid
wird verwendet, um Type für einen Typ zur Kompilierzeit abzurufen.
typeid
ähnelt dem Abrufen des System::Type
Typs zur Laufzeit oder GetType GetType. typeid
Akzeptiert jedoch nur einen Typnamen als Parameter. Wenn Sie eine Instanz eines Typs verwenden möchten, um seinen System::Type
Namen abzurufen, verwenden Sie GetType
.
typeid
muss in der Lage sein, einen Typnamen (type) zur Kompilierungszeit auszuwerten, während GetType den Typ auswertet, der zur Laufzeit zurückgeben wird.
typeid
kann einen nativen Typenamen oder Common Language Runtime-Alias für den nativen Typnamen annehmen. Unter .NET Framework-Entsprechungen der nativen Typen in C++ (C++/CLI) finden Sie weitere Informationen hierzu.
typeid
funktioniert auch mit nativen Typen, obwohl weiterhin ein System::Type
. Verwenden Sie typeid
"Operator", um eine type_info Struktur abzurufen.
Anforderungen
Compileroption: /clr
Beispiele
Im folgenden Beispiel wird das typeid-Schlüsselwort mit dem GetType()
-Member verglichen.
// 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*
Das folgende Beispiel zeigt, dass eine Variable des Typs System::Type verwendet werden kann, um die Attribute für einen Typ abzurufen. Außerdem wird veranschaulicht, dass Sie für einige Typen eine Typdefinition erstellen müssen, um typeid
zu verwenden.
// 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