没有合适的资源?快使用搜索试试~ 我知道了~
一个更好的C++序列化/反序列化库Kapok
19 下载量 105 浏览量
2020-12-15
00:09:29
上传
评论 1
收藏 79KB PDF 举报
温馨提示
试读
2页
Kapok FAQ 1.Kapok的特点 简单,易用,header-only,只需要引用Kapok.hpp即可;高效,初步测试性和messagepack相当。 它是纯c++11实现,因此需要支持C++11的编译器。 2.主要功能 对对象进行自动化的序列化和反序列化,用起来非常简单,先来看个序列化/反序列化一个tuple的例子吧。 //序列化 Serializer sr; auto tp = std::make_tuple(10, 12, string("test")); sr.Serialize(tp, "tuple"); //反序列
资源推荐
资源详情
资源评论
一个更好的一个更好的C++序列化序列化/反序列化库反序列化库Kapok
Kapok FAQ
1.Kapok的特点
简单,易用,header-only,只需要引用Kapok.hpp即可;高效,初步测试性和messagepack相当。
它是纯c++11实现,因此需要支持C++11的编译器。
2.主要功能
对对象进行自动化的序列化和反序列化,用起来非常简单,先来看个序列化/反序列化一个tuple的例子吧。
//序列化
Serializer sr;
auto tp = std::make_tuple(10, 12, string("test"));
sr.Serialize(tp, "tuple");
//反序列化
DeSerializer dr;
std::tuple<int, int, string> p;
dr.Parse(sr.GetString());
dr.Deserialize(p, "tuple");
看起来是不是很简单!
再看一个序列化一个自定义对象的例子。
struct Person
{
int age;
string name;
string city;
META(age, name, city)
};
Person p = { 18, "bb", "aa" };
//序列化
Serializer sr;
sr.Serialize(p, "Person");
//反序列化
DeSerializer dr;
Person person;
dr.Parse(sr.GetString());
dr.Deserialize(person, "Person");
一样的很简单,结构这里需要一个宏定义META,这个META的作用是获取对象的元信息,有了这个元信息我们可以很方便
的实现序列化和反序列化了。
3.应用场景
Kapok除了不支持指针之外所有的对象都支持,支持结构体的无限嵌套(被嵌套的结构体也必须定义META宏)。这里说一
下为什么不支持指针呢,因为对象中有指针的话存在两个问题:1.这个指针如果是动态数组的话,c++中无法获取这个数组的长
度;2.指针还涉及到内存管理,我希望Kapok专注于序列化和/反序列化,暂时不考虑内存管理。
4.结构体必须有一个宏定义是否具有侵入性?
看起来每个序列化/反序列化的对象都要带一个宏定义似乎侵入性较强,但这种侵入性是完全无害的,因为它只是定义了一个
额外的函数而已,这个函数只会在序列化/反序列化的时候才会用到,不会对当前对象造成任何影响,还有一点是因为c++没有反
射,必须要通过某种方法来获取对象的元信息,纵观目前所有的序列化方案,只有这种方式是简洁的,用户做少的事情即可,这
也是我选择这种方式的原因。
5.Kapok是如何实现序列化/反序列化的
Kapok的底层是用到了rapidjson, 用它来实现对基本类型的序列化,对它做了一个简单的封装以便供上层使用,上面层是序
列化反序列化实现层,主要是实现对对象元信息的解析和自动化的打包和解包。下面是Kapok序列化的一个示意图:
序列化对象
6.Kapok的性能如何
资源评论
weixin_38623080
- 粉丝: 5
- 资源: 1003
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功