本文主要是介绍宏DECLARE_DYNCREATE与DECLARE_DYNAMIC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、作用
DECLARE_DYNCREATE的主要作用:
-
支持对象的动态创建: 使用
DECLARE_DYNCREATE
宏声明的类可以在运行时动态创建对象。 -
支持对象的序列化: MFC框架提供了对象的序列化支持,允许将对象的状态保存到磁盘(序列化为文件)或通过网络传输,然后重新加载对象状态
语法如下,在.h文件中声明该宏,必须在对应的cpp文件中使用IMPLEMENT_DYNAMIC宏
DECLARE_DYNCREATE(class_name )
DECLARE_DYNAMIC:支持运行时类型识别(RTTI)
看源码可知,DECLARE_DYNCREATE包含了DECLARE_DYNAMIC宏,所以凡是支持动态创建的,一定支持RTTI。
二、DECLARE_DYNCREATE实例
class CMyObject : public CObject
{DECLARE_DYNCREATE(CMyObject)public:CMyObject(); // 构造函数// 其他成员函数和属性// 声明对象的序列化函数virtual void Serialize(CArchive& ar);
};
三、DECLARE_DYNAMIC的源码
通过上面的解释:可以认为使用这个DECLARE_DYNCREATE(class_name)可以使每个CObject的对象在运行的时候具备动态创建的能力。MFC框架利用这种能力来创建对象,例如当它从磁盘读取一系列对象的时候,很多对象都需要动态的去创建。
DECLARE_DYNAMIC在afx.h中声明如下:
#define DECLARE_DYNCREATE(class_name) \DECLARE_DYNAMIC(class_name) \static CObject* PASCAL CreateObject();#define DECLARE_DYNAMIC(class_name) \
protected: \static CRuntimeClass* PASCAL _GetBaseClass(); \
public: \static const CRuntimeClass class##class_name; \static CRuntimeClass* PASCAL GetThisClass(); \virtual CRuntimeClass* GetRuntimeClass() const; \ // 获取该类的类型为CRuntTimeClass的成员变量
可以看出:主要是一个静态成员变量CRuntimeClass,一个虚函数GetRuntimeClass
参考:
https://www.cnblogs.com/htj10/p/11831404.html
DECLARE_DYNCREATE与DECLARE_DYNAMIC区别_51CTO博客_DECLARE_DYNCREATE
DECLARE_DYNCREATE(class_name)的具体作用_不修边幅的胖子的博客-CSDN博客
这篇关于宏DECLARE_DYNCREATE与DECLARE_DYNAMIC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!