DECLARE_DYNCREATE提供与DECLARE_DYNAMIC完全相同的功能以及其动态对象创建功能。那么,为什么有人应该使用DECLARE_DYNAMIC而不是DECLARE_DYNCREATE?
记录了宏以提供不同的功能。
从CObject派生类时,增加了访问有关对象类的运行时信息的功能。
这提供了自省功能,类似于C ++提供的RTTI(运行时类型信息)。应用程序可以CObject
通过关联的CRuntimeClass
Structure查询派生的类实例的运行时类型。在需要检查对象是特定类型还是特定基类类型的情况下,此方法很有用。的示例CObject::IsKindOf
应该给您一个好主意。
使在运行时动态创建CObject派生类的对象。
该宏允许在运行时动态创建类实例。该功能通过类工厂方法提供CRuntimeClass::CreateObject
。当您需要在运行时根据类类型的字符串表示形式创建类实例时,可以使用它。一个示例是可定制的GUI,它是从初始化文件构建的。
这两个功能都是通过相同的CRuntimeClass
Structure实现的,这可能导致可以互换使用它们的结论。实际上,使用不合适的宏的代码可以很好地进行编译,并公开所需的运行时行为。区别纯粹是语义上的:宏传达了不同的意图,应根据所需的功能使用这些宏来传达开发人员的意图。
还有第三个相关的宏DECLARE_SERIAL
:
生成可序列化的CObject派生类所需的C ++头代码。
它支持将各个CObject
派生的类实例进行序列化,例如序列化到文件,内存流或网络套接字。由于反序列化过程需要根据序列化流动态创建对象,因此它包含的功能DECLARE_DYNCREATE
。
放在一起,下面的列表应帮助您为特定的方案选择正确的宏:
DECLARE_DYNAMIC
,如果你的代码需要检索对象的运行时类型。DECLARE_DYNCREATE
此外,如果您需要基于类型的字符串表示形式动态创建类实例,请使用。DECLARE_SERIAL
如果,另外,你需要提供序列化支持。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句