Sdílet prostřednictvím


typeid (rozšíření komponent C++)

Načte hodnotu označující typ objektu.

Poznámka k upozornění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

  
  
  
  
  
  
  
  

Viz také

Koncepty

Rozšíření komponent pro platformy běhového prostředí