看了几个序列化框架,都有这个那个瑕疵
1. boost 太大,不容易学
2. eternity 不支持非侵入式,必须在类里加序列化方法。并且不支持 map<int, vector<my_class》 之类嵌套
3. s11n 太复杂,不支持二进制存储,导致文件比较大
所以尝试自己搞了下,目前做到以下功能
1. 非侵入式
2. 支持pod原生类型,如 int, double, 指针
3. 支持stl容器
4. 二进制存储
例子:
[cpp]
#include <windows.h>
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
#include "serialization.h"
#include "stl/vector.h"
#include "stl/map.h"
#include "stl/string.h"
struct packet {
int x;
string name;
};
typedef map<int, vector<packet》 vmap;
vmap m;
template <class Stream>
void serialize(Stream& stream, packet& p) {
serialize(stream, p.x);
serialize(stream, p.name);
}
template <class Stream>
void de_serialize(Stream& stream, packet& p) {
de_serialize(stream, p.x);
de_serialize(stream, p.name);
}