本篇文字主要来记录学习使用boost进行序列化
介绍
boost 序列化支持序列化成普通文本文件、XML文件、二进制文件。 同时可以序列化继承关系, STL组件, 数组等。通常支持两种序列化方式: 一种为侵入式, 即在类中序列化对象; 一种为非侵入式, 即在类外进行序列化操作。
实例
序列化成普通文本
主要针对普通对象结构体进行序列化实例讲解
非侵入式
所谓非侵入式, 即不与类结构耦合
// C
#include <stdlib.h>
#include <stdio.h>
// C++
#include <fstream>
#include <string>
// boost
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/vector.hpp>
// step 1 声明结构体
struct test_structure{
std::string strVal{
""};
std::vector<int> vecInts{
};
double dVal{
0};
};
// step 2 非侵入式读写对象
namespace boost
{
namespace serialization
{
template <class Archive>
void serialize(Archive& ar, test_structure& test_val, const unsigned int version)
{
ar & test_val.strVal & test_val.vecInts & test_val.dVal;
}
}
}
using boost_iarchive = boost::archive::text_iarchive;
using boost_oarchive = boost::archive::text_oarchive;
// step 3 写入
void save_test_structure(const test_structure &s, const char * filename){
std::ofstream ofs(filename);
boost_oarchive oa(ofs);
oa << s;
}
// step 4 读取
void restore_test_structure(test_structure &s, const char * filename)