【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

在mfc当中,保存其实是一件很简单的事情。你要做的很简单,第一步就是编写一个serial的虚函数,另外一步就是CArchive调用解决,整个过程非常简单和流畅。当然,为了判断class之间是否存在集成关系,它和之前的类一样也使用了runclass的方法,剩下的就是一些算术符号重载的trick了。大家有兴趣参考一下下面的代码,就明白其中的逻辑了。

#include <iostream>
using namespace std;struct runclass {char name[64];struct runclass* next;};class cwrite {
public:cwrite() {cout << "cwrite::cwrite()" << endl;}~cwrite() {cout << "cwrite::~cwrite()" << endl;}
};#define CREATE_SERIAL(basic) \static runclass run_##basic; \static runclass* get_run_class() {return &run_##basic;} \friend cwrite& operator <<(cwrite& c, basic& b) {b.serial(c); return c;}class cobject {public:cobject() {cout << "cobject::cobject()" << endl;}virtual ~cobject() {cout << "cobject::~cobject()" << endl;}virtual void serial(cwrite& c) {cout << "cobject::serial()" << endl;}public:CREATE_SERIAL(cobject)
};runclass cobject::run_cobject = {"cobject", NULL};#define IMPLEMENT_SERIAL(basic, origin) \runclass basic::run_##basic = {#basic, &origin::run_##origin}class cwnd : public cobject {public:cwnd(){cout << "cwnd::cwnd()" << endl;}~cwnd() {cout << "cwnd::~cwnd()" << endl;}void serial(cwrite& c) {cout << "cwnd::serial()" << endl;}public:CREATE_SERIAL(cwnd)
};IMPLEMENT_SERIAL(cwnd, cobject);bool
isKindOf(runclass* basic, runclass* origin){if(NULL == basic || NULL == origin)return false;while(basic->next)basic = basic->next;return 0 == strcmp(basic->name, origin->name) ? 1:0;
}int
main(int argc, char* argv[]){cwrite c;cobject obj;cwnd wnd;c << obj;c << wnd;return 0;
}

mfc大观之四(串行保存)相关推荐

  1. MFC六大核心机制之四:永久保存(串行化)

    永久保存(串行化)是MFC的重要内容,可以用一句简明直白的话来形容其重要性:弄懂它以后,你就越来越像个程序员了! 如果我们的程序不需要永久保存,那几乎可以肯定是一个小玩儿.那怕我们的记事本.画图等小程 ...

  2. 孙鑫MFC笔记之八--文档串行化

    1.CArchive在菜单打开保存时的代码 CFile file("1.txt",CFile::modeCreate | CFile::modeWrite); CArchive a ...

  3. MFC Windows程序设计学习笔记--文件和串行化

    文件IO主要为了 支持文档的存储和加载. 多数MFC程序用CArchive对象实现磁盘文档的存储和加载. 1.CFile: m_hFile 保存着与CFile相关联的文件的句柄. m_strFileN ...

  4. MFC(文档和串行化,孙鑫C++第十三讲笔记整理) .

    转自:http://blog.csdn.net/zh634455283/article/details/7882897 1.CArchive在菜单打开保存时的代码  CFile file(" ...

  5. MFC 文件I/O和串行化

    1.枚举所有文件夹(递归) void EnumerateFolders () {WIN32_FIND_DATA fd;HANDLE hFind = ::FindFirstFile (_T (" ...

  6. VC++ 串行化编程实例

    Win10 + VC6: 首先新建一个单文档工程,名为ardemo1: 增加写文件.读文件菜单:菜单ID自动生成:自己改也可以: 在 写文件 菜单,右击,选择 建立类向导: 在类向导中,类名选中Vie ...

  7. php 串行化数据,php中对象的串行化

    我们大家有知道PHP串行化可以把变量包括对象,转化成连续bytes数据,你可以将串行化后的变量存在一个文件里或在网络上传输,然后再反串行化还原为原来的数据.文章这里就PHP串行化为大家详细的介绍.你在 ...

  8. 进程、线程、进程池、进程三态、同步、异步、并发、并行、串行

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:cnblogs.com/songhaixing/p/1 ...

  9. 【SRIO】3、RapidIO串行物理层的包传输过程

    目录 一.引言 二.串行物理层的PCS层与PMA层 2.1 PCS层的功能 2.2 PMA层的功能 2.3 术语定义 2.3 8B/10B传输码 2.4 字符和码组记号 2.5 运行不一致(Runni ...

最新文章

  1. Transformer在CV领域有可能替代CNN吗?还有哪些应用前景?
  2. 解决Raspberry Pi不识别RTL8188eu无线网卡芯片的问题
  3. 市场规模占全国4成,广东物联网市场发展强劲
  4. 三条中线分的六个三角形_八年级数学上册:三角形已知两条边如何求第三边
  5. 下面介绍一个开源的OCR引擎Tesseract2。值得庆幸的是虽然是开源的但是它的识别率较高,并不比其他引擎差劲。网上介绍Tessnet2也是当时时间排名第三的识别引擎,只是后来慢慢不维护了,目前是G
  6. 「BZOJ1095」[ZJOI2007] Hide 捉迷藏
  7. TensorFlow2.0(四)--Keras构建深度神经网络(DNN)
  8. android评论功能带emoji,分享一个自己写的emoji-comments评论组件
  9. php excel导入数据库显示乱码,php修改excel表格数据库数据格式-使用phpexcel导入excel表格数据到MYSQL,乱码怎么解决...
  10. 存储可向外扩展无线传输
  11. ISO50001认证咨询,新版标准更加强调持续改进能源绩效主要体现在以下方面
  12. Android JNI的调用
  13. pandas计算同比环比增长
  14. 计算机二级office题库APP_2019最新题库_计算机二级office选择题
  15. 微信小程序各种动画轮子链接
  16. opencv亚像素边缘精度_opencv 快速亚像素边缘_亚像素边缘定位在光纤中应用
  17. 【毕业设计】stm32智能水杯设计与实现(恒温控制) - 单片机 物联网 嵌入式
  18. Linux性能分析工具top命令详解
  19. Tushare判断指定日期股票是否ST
  20. php ssdb配置,SSDB PHP程序api文档

热门文章

  1. 如何用轻量协作工具做bug管理
  2. nginx 日志过滤网络爬虫
  3. 视图中获取控制器中数据的方式
  4. Fedora和Red Hat Enterprise Linux实用指南(第6版)(套装上下册)火热上市!!!!
  5. Rokon 关于精灵的点击事件
  6. ES terms多值搜索及范围过滤深入剖析-搜索系统线上实战
  7. keepalived+lvs+nginx高可用
  8. Non-standard serial port baud rate setting
  9. codeforces 598C C. Nearest vectors(极角排序)
  10. Spring for Apache Hadoop 1.0发布