DECLARE_DYNCREATE提供与DECLARE_DYNAMIC完全相同的功能及其动态对象创建功能.那么为什么有人会使用DECLARE_DYNAMIC而不是DECLARE_DYNCREATE?
IIn*_*ble 11
记录宏以提供不同的功能.
添加从CObject派生类时访问有关对象类的运行时信息的功能.
这提供了内省功能,类似于C++提供的RTTI(运行时类型信息).应用程序可以CObject通过关联的CRuntimeClass结构查询已派生的类实例的运行时类型.在需要检查对象是特定类型还是具有特定基类类型的情况下,它非常有用.这些例子CObject::IsKindOf应该给你一个好主意.
允许在运行时动态创建CObject派生类的对象.
此宏允许在运行时动态创建类实例.该功能通过类工厂方法提供CRuntimeClass::CreateObject.当您需要在运行时根据类类型的字符串表示创建类实例时,可以使用它.一个示例是可自定义的GUI,它是从初始化文件构建的.
这两个特征都是通过相同的CRuntimeClass结构实现的,这可能导致它们可以互换使用的结论.事实上,使用不适当的宏的代码将编译得很好,并暴露所需的运行时行为.差异纯粹是语义的:宏传达不同的意图,应根据所需的特征使用,以传达开发者的意图.
还有第三个相关的宏,DECLARE_SERIAL:
生成可以序列化的CObject派生类所必需的C++头代码.
它支持将各个CObject派生类实例序列化,例如,文件,内存流或网络套接字.由于反序列化过程需要从序列化流动态创建对象,因此它包含的功能DECLARE_DYNCREATE.
综合起来,以下列表可以帮助您为特定场景选择正确的宏:
DECLARE_DYNAMIC,如果你的代码需要检索对象的运行时类型.DECLARE_DYNCREATE如果,另外,你需要动态地创建基于类型的字符串表示的类实例.DECLARE_SERIAL如果,另外,你需要提供序列化支持.| 归档时间: |
|
| 查看次数: |
2711 次 |
| 最近记录: |