【问题标题】:Need Of DECLARE_DYNAMIC?需要 DECLARE_DYNAMIC 吗?
【发布时间】:2016-03-02 07:02:23
【问题描述】:

DECLARE_DYNAMIC()用于获取RTTI,当一个类派生自CObject类时,我知道。 但是我在代码中看到,从CPropertySheet 派生的类有这个宏。 -> 它的需要是什么,既没有使用 iskindof() 也没有使用任何其他运行时信息?

这个派生类有两个构造函数,在创建对象时通过new调用。

我的问题是 DECLARE_DYNAMIC() 在这堂课中需要什么?

【问题讨论】:

  • 您知道在 C++ 中创建对象不必使用new 吗?
  • 并且仅仅因为不需要使用通过这个系统获得的额外RTTI信息,并不意味着其他人不需要它。
  • 这是很老的代码,我正在使用它,所以,只是想知道它的用途,以及,为什么给这个评分-1
  • Jeff Prosise' Programming Windows with MFC 解释了 MFC 中的所有预处理器宏。

标签: c++ visual-c++ mfc msdn


【解决方案1】:

使用此宏可以轻松地以 MFC 方式进行类型检查。假设您有一个特殊的 CPropertyPage 基类,或者您有一个特殊的派生 CPropertySheet,具有一个名为 CMyClass 的特殊接口,您可以轻松地使用 DYNAMIC_DOWNCAST 进行类型检查。

所以快速的答案是:如果你想在 MFC 类型检查中使用 DYNAMIC_DOWNCAST 或 STATIC_DOWNCAST。它只允许使用 IsKindOf。

它是三元组 DECLARE_DYNAMIC、DECLARE_DYNCREATE、DECLARE_SERIAL 的最低形式。

这里还有更多的answers 堆栈溢出。

【讨论】:

  • 我确信这是真的。然而,为什么不将这个宏添加到从 CObject 派生的每个类中呢?这是一个开销,这就是为什么。更好的是问,MFC 的哪些部分需要这些宏?文档、视图和框架至少需要 DYNCREATE,如果归档则可能需要 Document SERIAL。 PropertyPage 是否需要 DYNAMIC?不知道。这不是一个学术问题,因为我正在使用 PropertyPage 的
  • 没有属性页不需要它。只有在需要使用给定的 CRuntimeCLas 对象动态创建类的情况下才需要 DECLARE_DYNAMIC。
猜你喜欢
  • 2012-12-28
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 2013-02-13
  • 2011-02-25
  • 2010-12-17
  • 2012-02-09
相关资源
最近更新 更多