Sdílet prostřednictvím


typeid (C++/CLI a C++/CX)

Získá hodnotu, která označuje typ objektu.

Poznámka:

Toto téma se týká verze typeid rozšíření komponent C++. Informace o verzi ISO C++ tohoto klíčového slova naleznete v části typeid – operátor.

Všechny moduly runtime

Syntaxe

T::typeid

Parametry

T
Název typu.

prostředí Windows Runtime

Syntaxe

Platform::Type^ type = T::typeid;

Parametry

T
Název typu.

Poznámky

V C++/CX vrátí typeid Platform::Type vytvořený z informací o typu modulu runtime.

Požadavky

Možnost kompilátoru: /ZW

CLR (Common Language Runtime)

Syntaxe

System::Type^ type = T::typeid;

Parametry

type
Název typu (abstraktní deklarátor), pro který chcete objekt použít System::Type .

Poznámky

typeid slouží k získání Type typu v době kompilace.

typeid se podobá získání System::Type typu za běhu pomocí GetType nebo GetType. typeid Jako parametr však přijímá pouze název typu. Pokud chcete k získání názvu System::Type použít instanci typu, použijte GetType.

typeid musí být schopen vyhodnotit název typu (typ) v době kompilace, zatímco GetType vyhodnotí typ, který se má vrátit za běhu.

typeidmůže pro název nativního typu použít název nativního typu nebo alias modulu CLR (Common Language Runtime). Další informace najdete v tématu .NET Framework Ekvivalenty nativních typů C++ (C++/CLI).

typeid také funguje s nativními typy, i když bude stále vracet System::Type. Pokud chcete získat strukturu type_info, použijte typeid operátor.

Požadavky

Možnost kompilátoru: /clr

Příklady

Následující příklad porovnává klíčové slovo typeid se GetType() členem.

// 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*

Následující ukázka ukazuje, že proměnná typu System::Type se dá použít k získání atributů typu. Ukazuje také, že u některých typů budete muset vytvořit typedef, který se má použít typeid.

// 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

Viz také

Přípony komponent pro .NET a UPW