首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我要使用DECLARE_DYNAMIC而不是DECLARE_DYNCREATE?

为什么我要使用DECLARE_DYNAMIC而不是DECLARE_DYNCREATE?
EN

Stack Overflow用户
提问于 2015-01-10 18:27:29
回答 2查看 4.8K关注 0票数 5

DECLARE_DYNCREATE提供了完全相同的DECLARE_DYNAMIC特性以及它的动态对象创建能力。那么,为什么有人要使用DECLARE_DYNAMIC而不是DECLARE_DYNCREATE呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-11 11:59:23

这些宏被记录下来以提供不同的功能。

DECLARE_DYNAMIC

添加从CObject派生类时访问有关对象类的运行时信息的功能。

这提供了内省功能,类似于C++提供的RTTI (RTTI)。应用程序可以通过关联的CObject-derived类实例查询其运行时类型。在需要检查对象是否属于特定类型或具有特定基类类型的情况下,它非常有用。CObject::IsKindOf的示例应该给您一个好主意。

DECLARE_DYNCREATE

允许在运行时动态创建CObject-derived类的对象。

此宏允许在运行时动态创建类实例.该功能是通过类工厂方法CRuntimeClass::CreateObject提供的。当您需要根据类类型的字符串表示在运行时创建类实例时,可以使用它。一个例子是一个可自定义的GUI,它是由一个初始化文件构建的。

这两个特性都是通过相同的结构实现的,这可能导致可以互换使用它们的结论。实际上,使用不适当宏的代码会编译得很好,并公开所需的运行时行为。区别纯粹是语义的:宏传递不同的意图,并应根据所需的特性使用,以传达开发人员的意图。

还有第三个相关的宏,DECLARE_SERIAL

生成可以序列化的CObject-derived类所需的C++头代码。

它允许将各自的CObject-derived类实例序列化,例如将其序列化到文件、内存流或网络套接字。由于反序列化过程需要从序列化流动态创建对象,因此它包含了DECLARE_DYNCREATE的功能。

综合起来,下面的列表将帮助您为特定的场景选择正确的宏:

  1. 如果您的代码需要检索对象的运行时类型,请使用DECLARE_DYNAMIC
  2. 此外,如果需要根据类型的字符串表示动态创建类实例,则使用DECLARE_DYNCREATE
  3. 此外,如果需要提供序列化支持,请使用DECLARE_SERIAL
票数 14
EN

Stack Overflow用户

发布于 2015-01-11 11:38:02

你是在问:“为什么我拥有一台飞利浦螺丝刀?”答案是,你应该使用适合你需要的工具:如果你只需要开爆头螺丝,不要买菲利普斯的司机。否则,买一个。

如果您需要DECLARE_DYNCREATE提供的特性(例如,因为您正在创建一个在打开文档时由框架自动创建的视图),那么您应该使用DECLARE_DYNCREATE,如果您不使用并且DECLARE_DYNAMIC工作,您应该使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27879680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档