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 GetTypeGetType. 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

Siehe auch

Komponentenerweiterungen für .NET und UWP