Поделиться через


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

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

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

kwd9abya.collapse_all(ru-ru,VS.110).gifСинтаксис

T::typeid

kwd9abya.collapse_all(ru-ru,VS.110).gifПараметры

  • T
    Имя типа.

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

kwd9abya.collapse_all(ru-ru,VS.110).gifСинтаксис

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

kwd9abya.collapse_all(ru-ru,VS.110).gifПараметры

  • T
    Имя типа.

kwd9abya.collapse_all(ru-ru,VS.110).gifЗаметки

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

kwd9abya.collapse_all(ru-ru,VS.110).gifТребования

Параметр компилятора: /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.

kwd9abya.collapse_all(ru-ru,VS.110).gifТребования

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

kwd9abya.collapse_all(ru-ru,VS.110).gifПримеры

Пример

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

Вывод

  
  

Пример

Следующий пример демонстрирует, что переменную типа 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");
}

Вывод

  
  
  
  
  
  
  
  

См. также

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

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