C++语言中declare_dyncreate的含义
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/17 14:44:23
C++语言中declare_dyncreate的含义
我在读一段VC++程序,开头是这样的:
class CMainFrame:public CFrameWnd
{
protected://create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
…
最后这句DECLARE_DYNCREATE(CMainFrame)
起到什么作用?我在MSDN中就查到了同DECLARE_DYNCREATE相关的一句,"任何能够实现创建使用运行时类信息的MFC类必须标记DECLARE_DYNCREATE",但还是不明其意?
我在读一段VC++程序,开头是这样的:
class CMainFrame:public CFrameWnd
{
protected://create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
…
最后这句DECLARE_DYNCREATE(CMainFrame)
起到什么作用?我在MSDN中就查到了同DECLARE_DYNCREATE相关的一句,"任何能够实现创建使用运行时类信息的MFC类必须标记DECLARE_DYNCREATE",但还是不明其意?
这是MFC的序列化框架的实现手法而已.就是用一些宏技巧搭配其它的代码来能够实现较为复杂的RTTI(运行时类型信息).
一般情况下不必关注这个,除非你想了解MFC框架的底层.
它的本质就是MFC的序列化要求所有类都有一个CreateObject的静态方法用于创建自身.同时每个类都要求维护一个静态的CRuntimeClass对象,用于保存这个类的类型信息以便运行时动态查询.
DECLARE_DYNCREATE这个宏就是使用了一些技巧,来完成以上东西的定义,每个类里面加入这一句宏就可以完成上述的要求而不必自己手动写了.
基本上任何C++的RTTI框架或者序列化框架都有类似的手法,这方面钻下去有点深,如果不搞这方面的没必要看,真要看多了其实也就自己明白了.
一般情况下不必关注这个,除非你想了解MFC框架的底层.
它的本质就是MFC的序列化要求所有类都有一个CreateObject的静态方法用于创建自身.同时每个类都要求维护一个静态的CRuntimeClass对象,用于保存这个类的类型信息以便运行时动态查询.
DECLARE_DYNCREATE这个宏就是使用了一些技巧,来完成以上东西的定义,每个类里面加入这一句宏就可以完成上述的要求而不必自己手动写了.
基本上任何C++的RTTI框架或者序列化框架都有类似的手法,这方面钻下去有点深,如果不搞这方面的没必要看,真要看多了其实也就自己明白了.