12

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

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

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

目前我正在使用嵌套的 try-catch 块来寻找System::InvalidCastException感觉难看但有效的 s 。我打算尝试分析类似于上面的代码的东西,看看它是否更快/更慢/可读,但甚至无法找出语法来尝试。

万一有人想知道,这是因为有一个队列进入了一个线程,该线程提供了要处理的数据。有时我想更改设置并通过数据队列传递它们是一种简单的方法。

4

3 回答 3

28

您可以MyObject::typeid在 C++/CLI 中使用与在 C# 中相同的方式typeof(MyObject)。下面的代码无耻地从您的问题中复制并修改...

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

if( o->GetType() == MyObject::typeid )
{
    // Do somethine with the object
}
else
{
    // Try something else
}
于 2010-03-11T09:51:04.703 回答
9

您应该查看如何:在 C++ 中实现 is 和 as C# 关键字

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

于 2010-03-09T16:43:10.147 回答
0

编辑:我会把它留在这里。但这个答案适用于 C++。可能甚至与为 CLI 执行此操作无关。

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

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

于 2010-03-09T16:47:14.283 回答