【C++11】C++11 序列化库 cereal----- 未消化,待学习

cereal是一个C++11的序列化库,支持多种C++11编译器,小巧快速且易于扩展。它提供XML、JSON、二进制等多种序列化格式,并具有良好的性能和可读性。cereal通过成员方法实现对象的序列化,支持具名变量和智能指针,同时提供与Boost类似的语法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cereal —— C++11 序列化库

介绍

cereal是一个只包含头文件的C++序列化库,cereal支持任何类型的数据并可以将其序列化为不同形式,例如:二进制、XML或者JSON。

cereal的设计理念是快速、轻量级和容易扩展——cereal没有依赖第三库而且可以轻易的将其和其他代码相。

cereal 完整支持 C++11

cereal 已经支持 C++11 标准库中的所有类型了,而且 cereal 也完全支持继承和多态。为了保持 cereal 的简洁性并不降低性能,cereal 没有像 Boost 等库那样跟踪并序列化类中所有成员变量。cereal不支持原始指针和引用对象的序列化,但智能指针是支持的。

cereal 支持众多符合C++11标准的编译器

cereal 使用了很多C++11与编译器的特性。cereal 官方支持 g++4.7.3、clang++3.3、MSVC 2013或者更新的编译器。cereal可能支持其他类型或版本的编译器,比如ICC,但cereal不保证完全可用。在使用g++或者clang++时,cereal可以与libstdc++和libc++一起编译与执行。

cereal 小巧且迅速

一些简单的性能测试表名,cereal一般比Boost中的序列化库(或者其他库)要快,并且如果使用二进制文件存储序列化后的对象(数据),cereal占用的空间更小,这些特点在序列化小对象时更加明显。cereal使用了C++中最快的XML和JSON解析库。cereal的代码相对于其他库如Boost而言更加容易理解且更易扩展。

cereal 是可扩展的

cereal支持将序列化后的对象保存为XML、JSON、和二进制格式。如果需要,你可以添加自己想要的序列化文件格式和其他需要被序列化的数据类型(如自定义类,cereal默认只支持标准库中的类)。

cereal 有单元测试

为了保证库的可用性与可靠性,我们为cereal编写了单元测试。cereal使用了Boost 单元测试框架,所以运行这些单元测试需要配置Boost库。

cereal 很容易使用

cereal的使用是非常简单的,包含头文件并编写序列化语句既可。cereal有优秀的文档来描述其自身的概念和代码。cereal近最大可能在编译时识别并报告你代码中的错误。

cereal 提供了与Boost类似的语法

如果你使用过Boost中的序列化库,那么你使用cereal是就会感觉到很熟悉,cereal的设计使得熟悉boost的用户容易学习。cereal在对象的方法或者非成员函数中寻找序列化函数。与Boost不同,你不需要告诉cereal你序列化对象的类型。如果你曾经使用过Boost,请查看我们的迁移手册

下面是一个示例:

  

#include <cereal/types/unordered_map.hpp>

#include <cereal/types/memory.hpp>

#include <cereal/archives/binary.hpp>

#include <fstream>

struct MyRecord

{

uint8_t x, y;

float z;

template <class Archive>

void serialize( Archive & ar )

{

ar( x, y, z );

}

};

struct SomeData

{

int32_t id;

std::shared_ptr<std::unordered_map<uint32_t, MyRecord>> data;

template <class Archive>

void save( Archive & ar ) const

{

ar( data );

}

template <class Archive>

void load( Archive & ar )

{

static int32_t idGen = 0;

id = idGen++;

ar( data );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值