typeid (Komponentenerweiterungen für C++)
Ruft einen Wert ab, der den Typ eines Objekts angibt.
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 Platform::Type zurück, das aus den Laufzeit-Typeninformationen erstellt wird.
Anforderungen
Compileroption: /ZW
Common Language Runtime
Syntax
type::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 entspricht dem Abruf von System::Type mithilfe von GetType oder GetType für einen Typ zur Laufzeit.Jedoch akzeptiert typeid nur einen Typnamen als Parameter.Wenn Sie eine Instanz eines Typs verwenden möchten, um den 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 systemeigenen Typenamen- oder Common Language Runtime-Alias für den systemeigenen Typnamen annehmen. Unter .NET Framework-Entsprechungen der systemeigenen Typen in C++ (C++/CLI) finden Sie weitere Informationen hierzu.
typeid funktioniert auch mit systemeigenen Typen, obwohl noch ein System::Type zurückgegeben wird.Um eine type_info-Struktur abzurufen, verwenden Sie typeid Operator.
typeid folgt in der vorherigen /clr-Syntax auf __typeof.
Anforderungen
Compileroption: /clr
Beispiele
Beispiel
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);
}
Ausgabe
Beispiel
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");
}
Ausgabe