首页 新闻 安徽 体育 财经 黄梅 旅游 军事 娱乐 法治 教育 伊人 健康
繁体中文
 IT 彩信 读书 汽车 演艺 音乐 徽商 书库 邮件 论坛 贺卡 相册 交友
简体中文
精彩图库 业界动态 观察分析 手机数码 电脑教室 软件下载 游戏人间 本地市场
精彩推荐
v神六飞船今秋发射 嫦娥一号研制进展顺利
v首款迅驰二代笔记本昨日面市 起价10699元
v英特尔虚拟计划加速 虚拟技术今年将现身PC
v中日韩三国合作 中国有望成Linux热土
v联想再融资6亿美元 用于收购IBM全球PC业务
v爱不释手新奇搞怪 手机个性周边玩具大曝光
v回眸2004年 最具划时代意义手机TOP10
v《雇佣兵:海军陆战队》最新游戏画面
v《星球大战:帝国战争》最新游戏画面
精彩图片
  您当前的位置 :IT地带 > 电脑教室 > 程序设计 正文
【图文】利用C++模板编写的序列化框架

中安网  2005-01-24 14:32

  天极yesky1月24日报道 简介

  在这个框架中包含了一个序列化的基本框架,一套基本的类型识别系统,可以识别基础类型,复杂类型,自定义类型,STD的容器类型,而且可以这个基础上进行递归的扩展。

  可以将复杂的数据结构序列化到文件,并从文件中恢复。

  包含了完整的自动单元测试,和测试案例。

  正文

  写这个序列化框架最初是想用在一个大型的项目上,在那个项目中有一些相当复杂的在运行时构建出来的树形数据结构,如果可以将这个内存树序列化起来可以大大节约下次创建的时间。另外在自己做的一些小工具中,有些数据想保存在文件中,以后再从文件中读取,用序列化的方式也十分方便。而且那时正好系统的学习了一下C++模板技术,感觉在一般的编程活动中很难用到一些比较高级的模板技术,所以想用C++模板技术来写这个序列化框架。最后那个项目中没有使用这个序列化框架,但我至少达到了第二个目标,写这个序列化框架让我对C++模板技术有了更深层次的理解。

  在这个框架中包含了一个序列化的基本框架,一套基本的类型识别系统,可以识别基础类型,复杂类型,自定义类型,STD的容器类型,而且可以这个基础上进行递归的扩展。

  在写这个框架的同时,我也写了完整的测试案例。如果没有测试案例,要调试这样的框架可就真是难与登天,因为模板方面的错误,编译器报出来的信息很难看,有的根本就没用。

  代码是在VC7.1下写的,也只能在VC7.1下用,VC6对于C++模板的支持非常有限,而其他的编译器在这方面的支持也有出入。如果要用于其他的编译器可能要修改部分类型识别方面的代码。测试框架我用的是cppunit(1.9.14),这是个开源的测试框架,可以在www.xprogramming.com下载到。其中类型识别方面的代码我主要是参考了《C++ template》一书,和boost中的部分代码。

  由于是用模板写的比MFC中的运行时序列化框架在效率上的表现要好得多。使用起来也相当的简单。如果要学习C++模板的高级技术,研究一下这个框架可以获益良多。由于是框架代码,我写得相当规范,有注释,也有完整的测试案例,可以进行自动的回归测试。

  使用的方法比较简单请参考(fileRWTest.cpp)文件中的测试案例。

  普通的数据类型:

  (unsigned char, unsigned short, unsigned int, unsigned long, signed char, signed short, signed int, signed long, bool, char, wchar_t, unsigned long long, signed long long, float, double, long double)可以直接序列化及反序列化。

  对于指针类型:

  会序列化指针具体指向的对象,如果指针指向的对象的类型是序列化框架无法识别的类型会报出编译错误。注意在反序列化时,只需要传一个空指针即可,序列化框架会将被序列化的对象的值反序列化到堆上,并将地址付给指针。如果传一个有值的指针,在DEBUG模式下会在运行时引发一个断言错误。在RELEASE下会导致原来指针指向的对象被泄漏。

  [1]  [2]  [3]  下一页
编辑: 丁毅
 ∷【相 关 报 道】∷
-水滴石穿C语言之代码检查工具   04-12-28 11:13
-教你怎样轻松应付C语言考试   04-11-10 11:17
-水滴石穿C语言之指针、数组和函数   04-10-18 12:17
-水滴石穿C语言程序设计之正确使用const   04-09-17 12:21
-C语言笔试轻松过—也谈二级C应试技巧   04-04-09 14:48
 

中国安徽在线网站(中安在线)版权所有 未经允许 请勿复制或镜像
皖ICP证 030106号