您的位置:首页 > 其它

Boost序列化之一

2011-12-31 23:50 162 查看
本来想自己实现一个简单的序列化以临时解决项目,然左思右想,自己实现一来时间不够充裕,二来稳定性、扩展性以及可移植性不是那么好把握,最终还是选择了一个开源库——boost。

boost中的串行化使用简单,易于扩展,如下例:

#include <boost/serialization/vector.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <string>
#include <iostream>
#include <fstream>

using namespace std;

class CSerialize
{

private:

friend class boost::serialization::access;

//数据成员
int m_nNum1;
double m_dNum2;
std::string m_strInfo;

template<class Archive>
void serialize( Archive & ar, const unsigned int file_version )
{
ar & m_nNum1;
ar & m_dNum2;
ar & m_strInfo;
}
public:
CSerialize(int _num1, double _num2, string& _strInfo) : m_nNum1(_num1), m_dNum2(_num2), m_strInfo(_strInfo){

}
CSerialize(){}
~CSerialize(){};

void print()
{
cout << m_nNum1 << " " << m_dNum2 << endl;
cout << m_strInfo << endl;
}

static void saveData(CSerialize& data, string fileName)
{
ofstream fout(fileName);
boost::archive::binary_oarchive ar_out(fout);
ar_out << data;
}
static void loadData(CSerialize& data, string fileName)
{
ifstream fin(fileName);
boost::archive::binary_iarchive ar_in(fin);
ar_in >> data;
}

ofstream& operator<<(ofstream& os);
ifstream& operator>>(ifstream& is);
protected:
private:
};

ofstream& CSerialize::operator<<(ofstream& os)
{
os << m_nNum1 << m_dNum2 << m_strInfo;
return os;
}
ifstream& CSerialize::operator>>(ifstream& is)
{
is >> m_nNum1 >> m_dNum2 >> m_strInfo;
return is;
}
int main(int argc, char *argv[])
{
ofstream fout("test.vipp");
boost::archive::binary_oarchive ar_out(fout);

CSerialize obj1(1, 2.5, string("Oh Oh ha ha tttt"));
ar_out << obj1;
fout.close();

ifstream fin("test.vipp");
boost::archive::binary_iarchive ar_in(fin);
CSerialize new_obj;
ar_in >> new_obj;
fin.close();
new_obj.print();

CSerialize test_obj;
CSerialize::loadData(test_obj, "test.vipp");
test_obj.print();
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: