2010-03-20 57 views
4

我正在寻找在C++中的对象序列化/反序列化库的建议?哪一个是最先进和开源的?需要在C++中的对象序列化库的建议

它可以处理

  • 任何类的用户定义的?
  • 对象层次结构(父类和子类)?
  • 一棵树的对象? A类具有B类属性,其属性为C类?
  • STL容器? A类具有B类矢量?
  • 循环的对象?类A有一个指向B的指针,它有一个指向A的指针?

我找到boost序列化库。我不确定它的局限性是什么http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/tutorial.html

回答

3

这真的取决于你在找什么。如果您正在图书馆寻找超快的速度和快速开发,Boost真棒。如果你正在寻找超快的速度,多一点的定制能力和跨库兼容性,那么Qt是一个很好的解决方案(并不是说Boost也不能这么做)。如果您正在寻找疯狂的互操作性,那么寻找一种基于文本的序列化系统,如JSON(jsoncpp),YAML(yamlcpp)或XML(方式太多),每个系统都有大约80亿个独立库。

3

Protocol buffers是Google开发和使用的用于跨语言对象序列化的库。它的概念可能与你所描述的有所不同,但值得一看。

1

Linderdaum引擎核心(iObject,iStaticClass和clLinker对象)为C++提供自定义RTTI。

序列化背后的想法很简单:我们使用自动化源代码后处理器(LSDC)生成所有保存/加载代码以及所有元类和属性的注册。 任何对象都可以序列化为基于抽象树的标记语言脚本。支持XML和自定义类JSON(我们称之为XLML)脚本。

实现细节在这个答案描述:https://stackoverflow.com/a/10332336/1182653

  1. 从IObject提取派生的任何类支持
  2. 对象层次结构支持
  3. 对象的 “树” 的支持
  4. 的std ::向量样容器(支持push_back/size语义)被支持
  5. 那么,这些属性是明确定义的,并且可以执行“指针修正”在定制的iObject :: EndLoad()方法中编辑(在用户类中重新定义)