Boost序列化之一

本来想自己实现一个简单的序列化以临时解决项目,然左思右想,自己实现一来时间不够充裕,二来稳定性、扩展性以及可移植性不是那么好把握,最终还是选择了一个开源库——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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值