Qt - 序列化树结构(很多指针)

时间:2012-07-24 21:57:36

标签: c++ qt serialization qt4 tree

我有一个带有很多指针的树结构,基本上树的节点就像这样

class Node
{
   Node *my_father;
   QVector<Node*> my_children;

  ... a lot of data
}

我需要所有这些指针,以便在RAM内存中使我的工作更轻松。但现在我需要保存磁盘上的所有树结构..我正在考虑使用QDataStream序列化(http://www.developer.nokia.com/Community/Wiki/Qt_Object_Serialization)..但我不认为这是用指针工作..对吗?

您建议将这个大型结构保存在磁盘上并使用指针重新读入RAM吗?

2 个答案:

答案 0 :(得分:2)

为什么不使用XML格式?它的设计非常容易使用所有结构化数据,嵌套对象,如您使用的树结构。但是你不想在其中存储指针 - 只是实际的数据。 (存储在指针中的数据,描述树结构本身将成为XML结构,因此您不需要它们。)

然后,当您为某个节点分配新子节点时,您需要在文件读取期间重新创建指针。

BTW对不起这个答案而不是评论,但我还不能写问题评论;]。

答案 1 :(得分:1)

显然,无法保证从磁盘读取的指针始终有效。但您仍然可以将它们用作“整数ID”,如下所示。要编写,请将指针与其余数据一起保存到磁盘。此外,对于每个类实例,将其自己的地址保存到磁盘。这将是该对象的“整数ID”。阅读,

1)使用保存的整数ID信息将每个对象与其子对象和父对象关联。最初,您可能必须将所有Node读入一个大清单。

2)然后,一旦孩子,父亲在记忆中将他们的实际地址分别写入my_fathermy_children

对我来说有点讨厌,但我想不出更直接的方法来解决这个问题。