MFC DYNAMIC_DOWNCAST 与 dynamic_cast

MFC DYNAMIC_DOWNCAST vs. dynamic_cast

MFC 库中的 DYNAMIC_DOWNCAST 和标准 C++ dynamic_cast 运算符有什么区别?我可以对 MFC 对象使用安全 dynamic_cast 而不是 DYNAMIC_DOWNCAST 吗?

当我的 类 包含 DECLARE_DYNAMICIMPLEMENT_DYNAMIC 宏时,我可以使用 dynamic_cast 运算符还是必须对此类对象使用 DYNAMIC_DOWNCAST 宏?

What is the difference between DYNAMIC_DOWNCAST from MFC library and standard C++ dynamic_cast operator?

DYNAMIC_DOWNCAST 和 dynamic_cast 通过不同的机制在运行时实现同一件事,有关对象数据类型的信息。 DYNAMIC_DOWNCAST 通过使用一组宏来声明和实现用于获取对象的 class 信息的方法。 dynamic_cast 通过使用由编译器实现的 Run-Time 类型信息实现相同的目的。

Can I use safety dynamic_cast instead of DYNAMIC_DOWNCAST for MFC objects? When my classes contain DECLARE_DYNAMIC and IMPLEMENT_DYNAMIC macros, can I use dynamic_cast operator or I must use DYNAMIC_DOWNCAST macro for this type of objects?

如果您使用 RTTI 编译并且至少有一个虚拟方法,则允许使用 dynamic_cast。 DYNAMIC_DOWNCAST 实现了一堆虚方法,所以你只需要检查你的编译器是否支持 RTTI 以及它是否打开。