可以比较RUNTIME_CLASS()宏返回的指针吗?

时间:2010-06-15 12:37:50

标签: c++ mfc rtti

我有一个函数,它需要一个CRuntimeClass指针列表才能设置视图。如果使用已经设置的相同类的列表调用函数,我想不返回任何内容。保存指针值并在下次调用时比较它们当前正在工作,但我想验证这是合法的事情,而不是恰好可行的事情。也许我的doc-search-fu缺乏,但我无法找到任何保证从给定类的RUNTIME_CLASS()宏返回的指针值在程序生命周期内是相同的。我能找到的最接近的是docs for CObject::GetRuntimeClass()

  

每个CObject派生类都有一个CRuntimeClass结构。

这意味着指针值不应该改变,但不能准确地说明它。有人有更具体的东西吗?或者有更好的方法来比较CRuntimeClasses吗?

2 个答案:

答案 0 :(得分:2)

没有记录这样的保证,尽管很可能。你应该使用CObject :: IsKindOf()。

答案 1 :(得分:1)

查看afx.h加上一些调试表明RUNTIME_CLASS()返回指向静态成员的指针:static CRuntimeClass class##class_name(因为它可以在{{1}的定义中看到宏})。

由于该成员是静态的,因此指向它的指针在运行时不会更改。换句话说,DECLARE_DYNAMIC(class_name)是您的保证。