Boost库使用笔记(Serialization)

 
拿到BOOST库,想使用其中的串行化的类库Serialization,于是首先得将它构建出来:
1.       编译BOOST之Serialization库
由于我使用的是VS2003.NET首先想到的是打开boost_root/libs/serialization/
vc7ide/BoostSerializationLibrary.sln,编译Library.vcproj之后得到了boost_wserialization-vc
71-mt-gd.lib这个库文件.
按照BOOST自带的Tutorial,编写了它的测试代码如下:
#include "stdafx.h"
 
#include 
<fstream>
 
// include headers that implement a archive in simple text format
#include <boost/archive/text_oarchive.hpp>
#include 
<boost/archive/text_iarchive.hpp>
 
/
//  gps coordinate
//

//  illustrates serialization for a simple type
//
class
 gps_position
{
private
:
    friend 
class
 boost::serialization::access;
    
//
 When the class Archive corresponds to an output archive, the
    
//
 & operator is defined similar to <<. Likewise, when the class Archive
    
// is a type of input archive the & operator is defined similar to >>.

    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() {
    
// create and open a character archive for output

    std::ofstream ofs("filename" );
    boost::archive::text_oarchive oa(ofs);
 
    
// create class instance

    const gps_position g(355924.567f );
    
// write class instance to archive

    oa <<  g;
    
// close archive

    ofs.close();
 
    
//
 ... some time later restore the class instance to its orginal state
    
// create and open an archive for input

    std::ifstream ifs("filename" , std::ios::binary);
    boost::archive::text_iarchive ia(ifs);
    
// read class state from archive

    gps_position newg;
    ia 
>>
 newg;
    
// close archive

    ifs.close();
    
return 0
;
}
 
将编译出来的boost_serialization-vc71-mt-gd.lib加入到库路径当中编译出现有缺少boost_serialization-vc71-sgd.lib这个文件,于是想办法来从上面的BoostSerializationL
ibrary.sln中得到该库文件,但是未果.
后来利用网上的办法利用bjam来进行构建,但是听说全部构建需要将近三四个小时的时间,我不想要全部构建,只想得到关于serialization的相关的库文件,于是产生了下面的SHELL命令:
set VC71_ROOT=D:/Program Files/Microsoft Visual Studio .NET 2003/Vc7
bjam -sTools=vc71 "sVC71_ROOT=D:/Program Files/Microsoft Visual Studio .NET 2003/Vc7" --with-serialization stage
将这些做成make.bat放于boost的目录下面,于是编译,将近有10分钟后在boost/stage/libs下面会出现serialization的相关的所有库文件,将这引起库文件放置于VC的库路径下,编译上面的测试代码则顺利通过.
2.       分析serialization测试代码
在类gps_positin当中定义了一个
    template<class Archive>
    
void serialize(Archive & ar, const unsigned int  version)
    {
        ar 
&
 degrees;
        ar 
&
 minutes;
        ar 
&
 seconds;
    }
的内嵌serialize函数,用来将gps_positin与ar梆定,在这里ar是Archive的一个实例, Archive我们可以看做是一个媒质,这个媒质要符合一定的接口规范.在该函数内部我们可以看到ar分别与gps_positin的degree,minutes,seconds这三个成员变量进行梆定,
 
    std::ofstream ofs("filename" );
boost::archive::text_oarchive oa(ofs);
当中我们可以看到定义了一个输出文件流ofs,并且定义了一个文本媒质,这个媒质挂载了输出文件流ofs.
oa <<  g; 
ia 
>> newg;
使得oa成为了文本filename与g之间的桥梁,将g的内容与入到filename当中,ia从filename当中将g读出.
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值