最便捷、最强大、速度最快的C++序列化框架。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ?>
特别注意:vc6太古老,不符合C++规范,无法使用该框架
1. 高性能,速度非常快,比你能找到的同类产品至少快一个数量级
2. 在网络通讯,数据库存储中非常好用。
3. 预先支持所有基本类型,所有stl容器类型(除stack/queue之外)
4. 支持变长int32/uint32/int64/uint64
5. 支持stl::pair,boost::tuple
6. 可选的版本控制,而非强制
a) 对于小对象,通常不需要版本控制
b) boost::serialization的版本号是强制的,当初我设计这个序列化框架就是因为boost不能省略版本号
7. 非侵入式设计,不污染名字空间
8. 声明式语法,简单,可靠
9. …….
还是用代码说明问题最简洁,看这个例子:
struct MyData1
{
int a, b, c;
var_int32_t d; // d.t is int32 value
var_uint64_t e; // d.t is uint64 value
std::string f;
std::map<std::string, int> g;
std::set<int> h;
// 声明序列化,无版本控制,最简洁的声明,后面几个稍微复杂点
DATA_IO_LOAD_SAVE(MyData1, &a&b&c&d&e&f&g&h)
};
struct MyData2
{
int a, b, c;
var_int32_t d;
var_uint64_t e;
std::string f;
std::map<std::string, int> g;
std::set<int> h;
// 声明序列化,有版本控制
DATA_IO_LOAD_SAVE_V(MyData2,
1, // 当前版本
&a&b&c&d&e&f&g&h
)
};
struct MyData3
{
int a, b, c;
boost::int32_t d;
boost::uint64_t e;
std::string f;
std::map<std::string, int> g;
std::set<int> h;
std::multiset<int> i;
unsigned version;
// 声明序列化,有版本控制
DATA_IO_LOAD_SAVE_V(MyData3,
2, // 当前版本
&a
&b
&c
&as_var_int(d) // d 声明为int32_t, 但是作为var_int32_t 来存储
&as_var_int(e) // e 声明为uint64_t, 但是作为var_uint64_t 来存储
&f
&g
&h
&vmg.since(2, i) // 版本2 新增了成员i
&vmg.get_version(version) // 如果需要,将版本值存入version 成员
)
};
int main(int argc, char* argv[])
{
PortableDataOutput<AutoGrownMemIO> output;
PortableDataInput<MemIO> input;
output.resize(1024COLOR: