如何使用IsKindOf()函数来检查两个对象



我知道ISKINDOF()函数用于比较声明DECLARE_DYNAMIC的两个类对象。

但问题是如何比较未声明DECLARE_DYNAMIC的对象指针。

    CSample *sample1, *sample2;
    sample1.ISKINDOF(sample2);

上面的示例肯定会显示错误。

是否有任何功能可以检查上述约束?

请注意,此解决方案确实需要从 CObject 派生并使用 DECLARE_DYNAMICIMPLEMENT_DYNAMIC 。有什么原因不能使用它们吗?

获取应与其他对象相同的对象的运行时类或另一个对象的超类。假设您认为 sample2 是 sample1 的同一类或超类:

CRuntimeClass* pClass = sample2->GetRunTimeClass();
BOOL sample1IsKindOfSample2 = sample1->IsKindOf(pClass);

如果您的 VC++ 代码编译为/GR(这是最近的编译器/IDE 中的默认设置),则可以使用 dynamic_cast 来浏览对象的运行时类型。

然而,正如DWO在他的评论中所暗示的那样,使用ISKINDOF等的设计通常应该被其他设计(如虚拟功能)所取代。

马丁

相关内容

  • 没有找到相关文章

最新更新