typeid(C++ 组件扩展)
获取一个指示对象类型的值。
所有运行时
语法
T::typeid
参数
- T
类型名称。
运行时的窗口
语法
Platform::Type^ = T::typeid;
参数
- T
类型名称。
备注
在 C++/CX, typeid 返回从运行时类型信息构造的 Platform::Type^。
要求
编译器选项: /ZW
公共语言运行时
语法
type::typeid
参数
- type
(抽象声明) 的所需 System::Type 对象的名称类型。
备注
typeid 用于获取类型的 Type 在编译时。
typeid 类似于获取类型的 System::Type 在运行时使用 GetType 或 GetType。 但是, typeid 只接受一个类型名称作为参数。 如果要使用类型获取的实例其 System::Type 名称,请使用 GetType。
typeid 必须能够计算类型名称 (类型) 在编译时,,而 GetType 计算该类型返回在运行时。
typeid 可以采用本机类型名称或公共语言本机类型的名称运行时别名;请参见 对应于 C++ 本机类型的 .NET Framework 类型 (C++/CLI) 有关更多信息。
typeid 还与本机类型一起使用,不过,它将返回 System::Type。 获取 type_info 结构,使用 typeid运算符。
typeid 是 sucessor 设置为在上述 /clr 语法的 __typeof 。
要求
编译器选项: /clr
示例
示例
下面的示例与 GetType () 成员比较 typeid 关键字。
// 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