为什么我应该使用DECLARE_DYNAMIC而不是DECLARE_DYNCREATE?

用户名

DECLARE_DYNCREATE提供与DECLARE_DYNAMIC完全相同的功能以及其动态对象创建功能。那么,为什么有人应该使用DECLARE_DYNAMIC而不是DECLARE_DYNCREATE?

我检查

记录了宏以提供不同的功能。

DECLARE_DYNAMIC

CObject派生类时,增加了访问有关对象类的运行时信息的功能

这提供了自省功能,类似于C ++提供的RTTI(运行时类型信息)。应用程序可以CObject通过关联的CRuntimeClassStructure查询派生的类实例的运行时类型在需要检查对象是特定类型还是特定基类类型的情况下,此方法很有用。的示例CObject::IsKindOf应该给您一个好主意。

DECLARE_DYNCREATE

使在运行时动态创建CObject派生类的对象

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

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

还有第三个相关的宏DECLARE_SERIAL

生成可序列化CObject派生类所需的C ++头代码

它支持将各个CObject派生的类实例进行序列化,例如序列化到文件,内存流或网络套接字。由于反序列化过程需要根据序列化流动态创建对象,因此它包含的功能DECLARE_DYNCREATE

放在一起,下面的列表应帮助您为特定的方案选择正确的宏:

  1. 使用DECLARE_DYNAMIC,如果你的代码需要检索对象的运行时类型。
  2. DECLARE_DYNCREATE此外,如果您需要基于类型的字符串表示形式动态创建类实例,请使用
  3. 使用DECLARE_SERIAL如果,另外,你需要提供序列化支持。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我应该使用常量顶点属性而不是制服?

来自分类Dev

为什么我应该使用.forEach语法而不是for循环语法?

来自分类Dev

为什么我应该使用mergemap而不是嵌套的http调用?

来自分类Dev

为什么我不应该使用“ inout”而不是“ in”或“ out”?

来自分类Dev

为什么我应该使用方法而不是__init __()?

来自分类Dev

序言-为什么我应该使用'dif'而不是'= \ ='

来自分类Dev

为什么我应该使用Vagrant而不是VirtualBox?

来自分类Dev

为什么我应该总是使用|| 代替| 和&&而不是&?

来自分类Dev

为什么应该使用资源而不是路由?

来自分类Dev

python“array”模块有什么作用,为什么我应该使用它而不是列表?

来自分类Dev

为什么所有库都使用`declare var`

来自分类Dev

为什么我应该使用CUDA驱动程序API而不是CUDA运行时API?

来自分类Dev

为什么我们应该使用类而不是记录,反之亦然?

来自分类Dev

为什么我应该在Android中使用匿名类而不是类重新定义?

来自分类Dev

为什么我不应该一直使用ICollection而不是IEnumerable?

来自分类Dev

为什么我应该使用简单数组而不是容器类?

来自分类Dev

我应该使用ViewModelProvider而不是ViewModelProviders吗?如果是这样,为什么?

来自分类Dev

为什么我们应该使用接口而不是具体类型?

来自分类Dev

为什么我们应该使用本地php gettext而不是gettexxt库

来自分类Dev

为什么我应该使用float而不是display:table-cell?

来自分类Dev

Java FX为什么我应该使用SimpleProperties而不是普通的nativ变量?

来自分类Dev

为什么我应该使用$ cacheFactory而不是手动获取/设置数据?

来自分类Dev

为什么我应该使用块作用域而不是函数作用域?

来自分类Dev

为什么我应该在 Projectile Motion 中使用速度方程而不是位置方程

来自分类Dev

为什么在bash脚本中需要“ declare -f”和“ declare -a”?

来自分类Dev

为什么bash脚本中需要“ declare -f”和“ declare -a”?

来自分类Dev

为什么我应该使用Django表格

来自分类Dev

为什么我应该使用JPanel?

来自分类Dev

为什么dynamic_cast是邪恶的?在这种情况下,我应该使用dynamic_cast吗?

Related 相关文章

  1. 1

    为什么我应该使用常量顶点属性而不是制服?

  2. 2

    为什么我应该使用.forEach语法而不是for循环语法?

  3. 3

    为什么我应该使用mergemap而不是嵌套的http调用?

  4. 4

    为什么我不应该使用“ inout”而不是“ in”或“ out”?

  5. 5

    为什么我应该使用方法而不是__init __()?

  6. 6

    序言-为什么我应该使用'dif'而不是'= \ ='

  7. 7

    为什么我应该使用Vagrant而不是VirtualBox?

  8. 8

    为什么我应该总是使用|| 代替| 和&&而不是&?

  9. 9

    为什么应该使用资源而不是路由?

  10. 10

    python“array”模块有什么作用,为什么我应该使用它而不是列表?

  11. 11

    为什么所有库都使用`declare var`

  12. 12

    为什么我应该使用CUDA驱动程序API而不是CUDA运行时API?

  13. 13

    为什么我们应该使用类而不是记录,反之亦然?

  14. 14

    为什么我应该在Android中使用匿名类而不是类重新定义?

  15. 15

    为什么我不应该一直使用ICollection而不是IEnumerable?

  16. 16

    为什么我应该使用简单数组而不是容器类?

  17. 17

    我应该使用ViewModelProvider而不是ViewModelProviders吗?如果是这样,为什么?

  18. 18

    为什么我们应该使用接口而不是具体类型?

  19. 19

    为什么我们应该使用本地php gettext而不是gettexxt库

  20. 20

    为什么我应该使用float而不是display:table-cell?

  21. 21

    Java FX为什么我应该使用SimpleProperties而不是普通的nativ变量?

  22. 22

    为什么我应该使用$ cacheFactory而不是手动获取/设置数据?

  23. 23

    为什么我应该使用块作用域而不是函数作用域?

  24. 24

    为什么我应该在 Projectile Motion 中使用速度方程而不是位置方程

  25. 25

    为什么在bash脚本中需要“ declare -f”和“ declare -a”?

  26. 26

    为什么bash脚本中需要“ declare -f”和“ declare -a”?

  27. 27

    为什么我应该使用Django表格

  28. 28

    为什么我应该使用JPanel?

  29. 29

    为什么dynamic_cast是邪恶的?在这种情况下,我应该使用dynamic_cast吗?

热门标签

归档