Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Получает значение, указывающее 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;
Параметры
тип
Имя типа (абстрактный декларатор), для которого требуется объект System::Type.
Замечания
typeid используется для получения Type для типа во время компиляции.
typeid аналогично получению System::Type типа во время выполнения или GetTypeGetType.
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