XML序列化数据对象(一)
XML序列化数据对象(一) struct STState { double m_dPosition; std::string m_strMemberName; double m_dTemperature; }; STState stState; 假设某程序有stState这么一个数据对象,需要对这个对象进行存储,对数据对象存储就是序列化了.
1.MFC中按照MFC的规则可以对对象进行序列化.(通过宏,好像,因为很少用MFC的序列化.).MFC的这种序列化有两个序列化函数,一个负责写入文件,一个负责读取文件.而MFC这种序列化变量的存储是有顺序的,读写两个函数必须要对应.
2.Boost库实现对象的序列化.
Boost中通过模板实现,每一个需要实现序列化的数据对象的类需要实现一个序列化模板函数. 看这两篇文章的说明 http://blog.csdn.net/cay22/article/details/4386250 http://blog.csdn.net/cay22/article/details/4386394
3.自己写代码.
也可以自己生成XML文件来存储数据对象,当然也是写一个写入文件的函数和写一个读取文件的函数.如果数据结构的结构改变了,这两个函数也是需要修改的,改动比较大的时候很容易错误;如果有10个数据结构,就要有20个解析过程(读写各10个),对着这20个解析过程,你可能会疯掉.(我也做过这样的事情!!!!!!!!!!!!!!!!!!!!!!!!!!!). 虽然解析各个数据结构的解析过程都不同,但是读写XML的流程是一致的.所以为什么boost使用模板函数做序列化处理的原因. 万变不离其中(模板就是在代码层的上一层编程).我自己写序列化的代码也是在代码层的上一层编程,但不是通过模板.而是通过写一个程序,这个程序根据数据结构的结构自动生成写文件函数和读文件函数代码.生成代码后重新编译程序即可.与使用模板有相似之处. (我不知道这么做与使用模板谁好谁差,只是想实现一些自己的想法.但这想法可能把事情复杂化,同时生成的一些代码也的确对自己的工作加快了). (把一些机械化和习惯性的工作固化到你的程序中可以尽量的减少犯错误和可以提高工作效率) MFC和boost的方法都是很方便的,如果数据结构改变,只需要修改序列化函数重新编译即可(修改的地方只有一处,大大减少犯错误的机会).
4.如何实现XML序列化数据对象(我自己的做法)
4.1定义对象类型,使用XML保存
例如:<basetypename="int"></basetype>,还有很多种类型
4.2有了XML格式存储的类型,数据对象的XML格式也可以确定下来,后面怎么弄都行了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 正则表达式 – R从字符串中提取第一个数字
- Oracle Study之-Oracle 11g OCM考试(1)
- ajax提交编码转换问题 java.io.charConVersionException:EO
- [sqlite] SQLite 转换为 postgresql
- Webdriver无法使用Flash控件上传附件
- 一个例子轻松学会Vue.js
- xcode – 如何从NSImage保存PNG文件(视网膜问题)正确的方法
- c# – 使用实体框架并使用orderby和skip/take的规范模式
- DataSet 读写xml 之后 时间格式多了时区的问题
- Oracle数据库用户及权限管理_超越OCP精通Oracle视频课程培训