MFC DYNAMIC_DOWNCAST 与 dynamic_cast

rgb*_*rgb 3 c++ mfc casting

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

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

小智 5

MFC 库中的 DYNAMIC_DOWNCAST 和标准 C++ dynamic_cast 运算符有什么区别?

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

我可以对 MFC 对象使用安全 dynamic_cast 而不是 DYNAMIC_DOWNCAST 吗?当我的类包含 DECLARE_DYNAMIC 和 IMPLEMENT_DYNAMIC 宏时,我可以使用 dynamic_cast 运算符还是必须对此类对象使用 DYNAMIC_DOWNCAST 宏?

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