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


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

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

Примечание.

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

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

Синтаксис

T::typeid

Параметры

T
Имя типа.

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

Синтаксис

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

Параметры

T
Имя типа.

Замечания

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

Требования

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

Среда CLR

Синтаксис

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

Параметры

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

Замечания

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

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

Оператор typeid должен уметь оценивать тип имени во время компиляции, тогда как GetType оценивает возвращаемый тип во время выполнения.

typeid может принимать имя собственного типа или псевдоним среды общего языка для имени собственного типа. Дополнительные сведения см. в разделе Эквиваленты собственным типам C++ в .NET framework.

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

Требования

Параметр компилятора: /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);
}
typeid and GetType returned the same System::Type
G

System.Single*

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

См. также

Расширения компонентов для .NET и UWP