|
|
1
12
Boost包含 serialization library . 我自己没有用过,但通常情况下,Boost库的工作效果很好。 |
|
|
2
7
不幸的是,在C++中没有自动序列化对象的方法。这是因为任何序列化引擎都需要能够在运行时“理解”自定义的对象,C++不包含为此所需的信息。另一方面,Java和.NET具有所谓的反射。这个机制允许任何人在运行时浏览任意对象的数据结构。 所有这些并不意味着没有办法用相对较少的努力来序列化C++对象。以标准C++流库为例。通过写作
您实际上序列化了一个int类型的对象。也可以扩展此机制来支持您的自定义类。这只需重载运算符<<。它不像Java序列化那么好,但是它也非常方便。 还有一些图书馆使它变得更简单。正如前面提到的, boost serialization library 做得很好。使用boost序列化看起来与使用iostream非常相似,但它解决了标准流固有的一些问题。 |
|
3
4
谷歌 protocol buffers 在核心包中提供C++实现,作为一个很好的好处,您可以共享这些数据 lots of other languages -但您将仅限于使用 生成 类型而不是您自己的类型(其他语言中的一些序列化引擎支持)。 实际上,这不是问题,因为(如果必要的话)您可以将生成的类型视为对您的 实际的 域对象。 |
|
|
4
3
序列化是一个非常好的库,它还支持基本的版本控制——这在自动序列化中是不可能实现的。因为我碰巧需要更好的版本控制,我实际上编写了自己的序列化库,它遵循boost.serialization样式(因为boost.serialization的作者对改进它不感兴趣)。 请注意,如果添加了一点助手数据,还可以将序列化函数用于其他目的,如GUI或Web表单生成(请参阅boost.serialization如何处理XML)。 需要注意的是,保存整个结构的流行方法(通过将它们转换成char和写入sig of(Stult)字节)是完全不可移植的,它不支持版本控制,如果结构包含任何指针或C++(非POD)对象,则它会中断。 |
|
|
5
2
有大量的手动咕噜工作(实际上,实现自己的侵入式或非侵入式RTTI),可以实现与C语言/ Java相媲美的自动化水平。 请参见以下详细信息: |
|
|
6
1
我已经成功地使用了这个: http://uscilab.github.io/cereal/ 它在iOS和Android上对我都很好。它是一个只包含头部的库,没有外部依赖项,因此使用非常方便。我更喜欢它而不是Boost,因为我不想导入所有Boost依赖项。这个库很小,支持XML、JSON、二进制和自定义序列化格式。 库(如boost)要求您显式地为基类编写一些serialiazion和反序列化代码,同时自动处理集合。 |
|
AstralHex · 矩阵乘法代码工作不正常 11 月前 |
|
|
Giogre · 为包含许多数值字段的简单“struct”重载比较运算符 11 月前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 11 月前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 11 月前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 11 月前 |