首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在structs上使用typeid()

如何在structs上使用typeid()
EN

Stack Overflow用户
提问于 2015-02-16 16:38:37
回答 1查看 133关注 0票数 2

在CLI项目中,我有一个函数,它接受对象^,并且必须知道哪种类型存储在对象中。我的代码适用于类,但如何将其用于结构?

代码语言:javascript
复制
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;
    }
}

编译器说: error C3083:‘矩形’:符号位于'::‘必须是一个类型。

然后我试着:

代码语言:javascript
复制
if (i_Type == typeid(Rectangle))
{
    ... do someting
    return;
}

现在它告诉我: error C2446:'==‘:没有从'const type_info’到'System::Type ^‘的转换。

然后我试着:

代码语言:javascript
复制
if (typeid(o_Object) == typeid(Rectangle))
{
    ... do someting
    return;
}

现在它告诉我:错误C3185:‘type it’:用于托管类型'System::Object ^',而使用'System::Object ^::typeid‘

然后我试着:

代码语言:javascript
复制
if (o_Object::typeid == typeid(Rectangle))
{
    ... do someting
    return;
}

它告诉我: error C2653:'o_Object‘:不是类或名称空间名称

我能做些什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-16 17:02:44

我找到了原因:

编译器不接受所编写的系统::绘图::矩形APTHOUGH:

代码语言:javascript
复制
using namespace System::Drawing;

在最上面。编译器接受该函数。

代码语言:javascript
复制
WINGDIAPI BOOL WINAPI Rectangle(__in HDC hdc, __in int left, __in int top, __in int right, __in int bottom);

相反,它在WinGdi.h中定义。

我必须补充:

代码语言:javascript
复制
#using <system.drawing.dll>

在顶端

并附加地写:

代码语言:javascript
复制
if (i_Type == System::Drawing::Rectangle::typeid)
{
     ... do someting
     return;
}

来解决歧义。

如果类名是从类或结构中提取的,那么它就没有什么可做的了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28546173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档