我有一个函数,它需要一个CRuntimeClass
指针列表才能设置视图。如果使用已经设置的相同类的列表调用函数,我想不返回任何内容。保存指针值并在下次调用时比较它们当前正在工作,但我想验证这是合法的事情,而不是恰好可行的事情。也许我的doc-search-fu缺乏,但我无法找到任何保证从给定类的RUNTIME_CLASS()宏返回的指针值在程序生命周期内是相同的。我能找到的最接近的是docs for CObject::GetRuntimeClass()
:
每个CObject派生类都有一个CRuntimeClass结构。
这意味着指针值不应该改变,但不能准确地说明它。有人有更具体的东西吗?或者有更好的方法来比较CRuntimeClasses吗?
答案 0 :(得分:2)
没有记录这样的保证,尽管很可能。你应该使用CObject :: IsKindOf()。
答案 1 :(得分:1)
查看afx.h
加上一些调试表明RUNTIME_CLASS()
返回指向静态成员的指针:static CRuntimeClass class##class_name
(因为它可以在{{1}的定义中看到宏})。
由于该成员是静态的,因此指向它的指针在运行时不会更改。换句话说,DECLARE_DYNAMIC(class_name)
是您的保证。