MFC DYNAMIC_DOWNCAST与dynamic_cast

时间:2015-03-13 10:59:46

标签: c++ casting mfc

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

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

1 个答案:

答案 0 :(得分:4)

  

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并且它是否已打开。