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