2

我正在寻找一个 C++ 对象持久性库来替换我已经制作原型大约一天的Eternity 库。永恒图书馆出现了短缺。

我创建了一个与此类似的对象层次结构:

对象层次

我有一个我想以 XML 格式保存和恢复std::list的's。ArchiveJob*每个ArchiveJob都有各种子对象,一些分配在堆栈上,一些在堆上。

Eternity 在正确持久化这些对象方面做得很好,但在恢复它们时却失败了。

(对于那些熟悉 Eternity 的人来说,下面的“恢复”操作未能从 XML 文件中读取任何数据)

xml_read( sequence<pointers>(), *pList, pList->begin(), xml, "ScheduleList" );

此调用为ArchiveJob对象分配了内存,但它的所有子对象都未初始化。

有人可以推荐一个对象层次结构持久性解决方案:

  1. 可以持久化/恢复 STL 容器
  2. Windows 开发人员是否友好(例如,如果需要构建,是否有 VS200x 解决方案文件)
  3. 可以处理复杂的对象层次结构

我应该花时间学习使用 boost 的 XML 序列化吗?它如何处理存储在 STL 容器的主对象中的复杂对象层次结构?

4

2 回答 2

4

Boost 序列化是您所需要的:

  1. 序列化容器
  2. 尽管它没有 VS2008 解决方案文件,但它是跨平台且对 Windows 友好的
  3. 序列化派生类

[编辑] 其实我错了,它包含VS7.1 解决方案文件

于 2011-01-26T13:19:18.550 回答
0

另一种选择是Google Protocol Buffers。如果您严格绑定到 XML,那么它不是基于XML 的。它也有点复杂,因为您需要在外部文件中使用特殊语法。关于层次结构,您可以阅读此讨论

于 2011-01-26T14:52:32.687 回答