如何在C ++ / CLI中检查对象的类型?

时间:2010-03-09 16:41:05

标签: c++-cli types detection

有没有一种简单的方法来检查对象的类型?我需要以下几点:

MyObject^ mo = gcnew MyObject();
Object^ o = mo;

if( o->GetType() == MyObject )
{
    // Do somethine with the object
}
else
{
    // Try something else
}

目前我正在使用嵌套的try-catch块寻找System::InvalidCastException,感觉很丑但很有效。我打算尝试编写类似上面代码的内容,看看它是否更快/更慢/可读但是无法解决语法甚至尝试。

如果有人想知道,这是因为让一个队列进入一个提供数据工作的线程。偶尔我想更改设置并通过数据队列传递它们是一种简单的方法。

3 个答案:

答案 0 :(得分:26)

您可以在C ++ / CLI中使用MyObject::typeid,就像在C#中使用typeof(MyObject)一样。以下代码无耻地从您的问题中复制并修改...

MyObject^ mo = gcnew MyObject();
Object^ o = mo;

if( o->GetType() == MyObject::typeid )
{
    // Do somethine with the object
}
else
{
    // Try something else
}

答案 1 :(得分:9)

您应该查看How to: Implement is and as C# Keywords in C++

  

本主题说明如何在Visual C ++中实现is和C#关键字的功能。

答案 2 :(得分:0)

编辑:我会留在这里。但这个答案适用于C ++。可能与CLI执行此操作甚至没有任何关联。

您需要使用RTTI(运行时类型信息)进行编译。然后查看维基百科文章http://en.wikipedia.org/wiki/Run-time_type_information并搜索谷歌搜索RTTI。应该适合你。

另一方面,您可能希望为所有数据类创建一个虚拟基类,并使用成员变量来描述它的类型。