如何在结构上使用 typeid()
How to use typeid() on structs
在 CLI 项目中,我有一个接受对象^ 的函数,并且必须知道对象中存储的是哪种类型。我的代码适用于 classes 但如何将它用于结构?
using namespace System::Drawing;
void AddObject(Object^% o_Object)
{
Type^ i_Type = o_Object->GetType();
if (i_Type == String::typeid) // OK
{
... do something
return;
}
if (i_Type == Rectangle::typeid) // ERROR
{
... do something
return;
}
}
编译器说:
错误 C3083:'Rectangle':“::”左侧的符号必须是类型。
然后我尝试了:
if (i_Type == typeid(Rectangle))
{
... do someting
return;
}
现在它告诉我:
错误 C2446:“==”:没有从 'const type_info' 到 'System::Type ^'
的转换
然后我尝试了:
if (typeid(o_Object) == typeid(Rectangle))
{
... do someting
return;
}
现在它告诉我:
错误 C3185:'typeid':用于托管类型 'System::Object ^',请改用 'System::Object ^::typeid'
然后我尝试了:
if (o_Object::typeid == typeid(Rectangle))
{
... do someting
return;
}
它告诉我:
错误 C2653:'o_Object':不是 class 或命名空间名称
我能做什么?
找到原因了:
编译器不接受 System::Drawing::Rectangle APTHOUGH 你写的:
using namespace System::Drawing;
在顶部。
编译器采用函数
WINGDIAPI BOOL WINAPI Rectangle(__in HDC hdc, __in int left, __in int top, __in int right, __in int bottom);
而不是在 WinGdi.h 中定义的。
我必须补充:
#using <system.drawing.dll>
在顶部
另外写:
if (i_Type == System::Drawing::Rectangle::typeid)
{
... do someting
return;
}
解决歧义。
typeid取自class或者我原来想的struct都没有关系
在 CLI 项目中,我有一个接受对象^ 的函数,并且必须知道对象中存储的是哪种类型。我的代码适用于 classes 但如何将它用于结构?
using namespace System::Drawing;
void AddObject(Object^% o_Object)
{
Type^ i_Type = o_Object->GetType();
if (i_Type == String::typeid) // OK
{
... do something
return;
}
if (i_Type == Rectangle::typeid) // ERROR
{
... do something
return;
}
}
编译器说: 错误 C3083:'Rectangle':“::”左侧的符号必须是类型。
然后我尝试了:
if (i_Type == typeid(Rectangle))
{
... do someting
return;
}
现在它告诉我: 错误 C2446:“==”:没有从 'const type_info' 到 'System::Type ^'
的转换然后我尝试了:
if (typeid(o_Object) == typeid(Rectangle))
{
... do someting
return;
}
现在它告诉我: 错误 C3185:'typeid':用于托管类型 'System::Object ^',请改用 'System::Object ^::typeid'
然后我尝试了:
if (o_Object::typeid == typeid(Rectangle))
{
... do someting
return;
}
它告诉我: 错误 C2653:'o_Object':不是 class 或命名空间名称
我能做什么?
找到原因了:
编译器不接受 System::Drawing::Rectangle APTHOUGH 你写的:
using namespace System::Drawing;
在顶部。 编译器采用函数
WINGDIAPI BOOL WINAPI Rectangle(__in HDC hdc, __in int left, __in int top, __in int right, __in int bottom);
而不是在 WinGdi.h 中定义的。
我必须补充:
#using <system.drawing.dll>
在顶部
另外写:
if (i_Type == System::Drawing::Rectangle::typeid)
{
... do someting
return;
}
解决歧义。
typeid取自class或者我原来想的struct都没有关系