Freigeben über


typeid (Komponentenerweiterungen für C++)

Ruft einen Wert ab, der den Typ eines Objekts angibt.

Warnung

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 Laufzeittypinformationen erstellt wird.

Voraussetzungen

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.

Voraussetzungen

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

  
  
  
  
  
  
  
  

Siehe auch

Konzepte

Komponentenerweiterungen für Laufzeitplattformen