当前位置:主页   - 电脑 - 程序设计 - C/C++
序列化支持(3)—Boost的序列化库的使用
来源:网络   作者:九天雁翎   更新时间:2011-10-11
收藏此页】    【字号    】    【打印】    【关闭

  本来来说,Boost的文档属于开源库中最最详细的一列了,基本上跟着文档走就都能学会了,但是对于初学者来说可能有的地方太过简略,当然,对于熟悉boost的人来说那叫主题吐出,一针见血。我这里主要摘文档中的例子来讲讲,偶尔发表一下自己的见解,有的地方也跟进实现去看看。毕竟原有的例子仅仅是很简单的。这里自然还是推荐任何学习者都像我一样,调试其中的每一个例子,而不仅仅是看看而已。

  关于Boost的编译和配置假如觉的麻烦,可以下一个自动下载安装的程序来完成,在windows下,从1.35开始我就一直使用此自动安装程序,安装和卸载非常方便,接下来需要做的就仅仅是简单的添加好工作路径就行了。

  以下例子如无特别说明都来自于boost的文档。

  例一:

// BoostLearn.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
 
#include <fstream>
 
// 包含以简单文本格式实现存档的头文件
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
 
/////////////////////////////////////////////////////////////
// gps 座标
//
// 举例说明简单类型的序列化
//
class gps_position
{
private:
    friend class boost::serialization::access;
    // 如果类Archive 是一个输出存档,则操作符& 被定义为<<.  同样,如果类Archive
    // 是一个输入存档,则操作符& 被定义为>>.
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
       ar & degrees;
       ar & minutes;
       ar & seconds;
    }
    int degrees;
    int minutes;
    float seconds;
public:
    gps_position(){};
    gps_position(int d, int m, float s) :
    degrees(d), minutes(m), seconds(s)
    {}
};
 
int main() {
    // 创建并打开一个输出用的字符存档
    std::ofstream ofs("filename");
 
    // 创建类实例
    const gps_position g(35, 59, 24.567f);
 
    // 保存数据到存档
    {
       boost::archive::text_oarchive oa(ofs);
       // 将类实例写出到存档
       oa << g;
       // 在调用析构函数时将关闭存档和流
    }
 
    // ... 晚些时候,将类实例恢复到原来的状态
    gps_position newg;
    {
       // 创建并打开一个输入用的存档
       std::ifstream ifs("filename", std::ios::binary);
       boost::archive::text_iarchive ia(ifs);
       // 从存档中读取类的状态
       ia >> newg;
       // 在调用析构函数时将关闭存档和流
    }
    return 0;
}

编缉推荐阅读以下文章

  • 序列化支持(4)—Boost的序列化库的强大之处
  • 序列化支持(2)—Boost的序列化库
  • 序列化支持(1)—前言
其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明