typeid (расширения компонентов C++)

Получает значение, показывающее тип объекта.

Предупреждение

Этот раздел относится к версии typeid из расширений компонентов C++.Версию ISO C++ этого ключевого слова см. в разделе Оператор typeid.

Все среды выполнения

Синтаксис

T::typeid

Параметры

  • T
    Имя типа.

среда выполнения Windows

Синтаксис

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

Параметры

  • T
    Имя типа.

Примечания

В C++/CX typeid возвращает значение Platform::Type, которое формируется из данных типа во время выполнения.

Требования

Параметр компилятора: /ZW

Среда CLR

Синтаксис

type::typeid

Параметры

  • type
    Имя типа (абстрактное объявление типа), для которого требуется объект System::Type.

Примечания

typeid используется для получения объекта Type для типов во время компиляции.

typeid аналогично получению System::Type для типа во время выполнения с помощью GetType или GetType. Однако typeid принимает только имя типа в качестве параметра. Если требуется использовать экземпляр типа для доступа к его имени System::Type, нужно использовать GetType.

typeid должен иметь возможность оценивать имя типа (тип) во время компиляции, тогда как GetType оценивает тип для получения во время выполнения.

typeid может взять имя собственного типа или псевдоним среды CLR для имени собственного типа; дополнительные сведения см. в разделе Эквиваленты собственным типам C++ в .NET Framework (C++/CLI).

typeid также работает с собственными типами, хотя он по-прежнему возвращает System::Type. Чтобы получить структуру type_info, используйте Оператор typeid.

typeid — последователь в __typeof в приведенном выше синтаксисе /clr.

Требования

Параметр компилятора: /clr

Примеры

Пример

В следующем примере сравниваются ключевое слово typeid и член 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);
}

Output

  
  

Пример

Следующий пример демонстрирует, что переменную типа System::Type можно использовать для получения атрибутов типа. Он также показывает, что для некоторых типов, необходимо создать typedef для использования 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");
}

Output

  
  
  
  
  
  
  
  

См. также

Основные понятия

Расширения компонентов для платформ среды выполнения