3

我有一个函数,它需要一个CRuntimeClass指针列表来设置一个视图。如果使用已设置的相同类的列表调用该函数,我想不做任何事情就返回。保存指针值并在下次调用时比较它们目前正在工作,但我想验证这是合法的事情,而不是碰巧起作用的事情。也许我的 doc-search-fu 缺少,但我找不到任何地方可以保证从给定类的 RUNTIME_CLASS() 宏返回的指针值在程序的生命周期中是相同的。我能找到的最接近的是在文档中CObject::GetRuntimeClass()

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

这意味着指针值不应该改变,但并不完全说明它。有没有人对此有更具体的看法?还是有更好的方法来比较 CRuntimeClasses?

4

2 回答 2

2

尽管有可能,但没有记录此类保证。您应该使用 CObject::IsKindOf()。

于 2010-06-15T13:06:38.140 回答
1

看一眼afx.h加上一点调试表明它RUNTIME_CLASS()返回一个指向静态成员的指针:(static CRuntimeClass class##class_name正如它可以在DECLARE_DYNAMIC(class_name)宏的定义中看到的那样)。

由于成员是静态的,指向它的指针在运行时不会改变。换句话说static,是您的保证。

于 2010-06-15T13:28:09.790 回答