如何在结构上使用 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都没有关系