Udostępnij za pośrednictwem


typeid (C++ Component Extensions)

Pobierz wartość, która wskazuje typ obiektu.

Informacje dotyczące przestrogiPrzestroga

W tym temacie odnosi się do wersji rozszerzeń składnika C++ typeid.Wersja ISO C++ dla tego słowa kluczowego, zobacz typeid — operator.

Wszystkie środowiska wykonawcze

Składnia

T::typeid

Parametry

  • T
    Nazwa typu.

Środowisko wykonawcze systemu Windows

Składnia

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

Parametry

  • T
    Nazwa typu.

Uwagi

W C++/CX, zwraca typeid Platform::Type który jest wykonana z informacji o typie runtime.

Wymagania

Opcja kompilatora: /ZW

Środowisko uruchomieniowe języka wspólnego

Składnia

type::typeid

Parametry

  • type
    Nazwa typu (deklarator abstrakcyjny), dla którego żądasz obiektu System::Type.

Uwagi

typeid jest używany do uzyskiwania Type dla typu w czasie kompilacji.

typeid jest podobne do uzyskiwania za pomocą GetType lub GetType System::Type dla typu w czasie wykonywania.Jednakże, identyfikator typu akceptuje tylko nazwę typu jako parametr. Jeśli chcesz użyć wystąpienia typu, aby uzyskać nazwę System::Typ, użyj polecenia GetType.

typeid musi mieć możliwość oceny nazwy typu (typu) w czasie kompilacji, podczas gdy GetType ocenia typ, jaki ma być zwrócony w czasie wykonywania.

typeid może przyjąć nazwę typu natywnego lub alias środowiska uruchomieniowego języka wspólnego dla nazwy typu natywnego; aby uzyskać więcej informacji, zob. Odpowiedniki typów natywnych języka C++ w programie .NET Framework (C++/CLI).

typeid współpracuje również z typami natywnymi, chociaż nadal zwraca System::Type. Aby uzyskać strukturę type_info, użyj typeid — operator.

typeid jest następcą __typeof w poprzedniej składni /clr.

Wymagania

Opcja kompilatora: /clr

Przykłady

Przykład

W poniższym przykładzie słowo kluczowe typeid porównywane jest do elementu członkowskiego 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);
}

Dane wyjściowe

  
  

Przykład

Poniższy przykład pokazuje, że zmienna typu System::Type może być użyta do uzyskania atrybutów w danym typie. Pokazuje także, że dla niektórych typów, trzeba będzie utworzyć element typedef w celu użycia 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");
}

Dane wyjściowe

  
  
  
  
  
  
  
  

Zobacz też

Koncepcje

Component Extensions dla platform środowiska uruchomieniowego