【问题标题】:Qt - Serializing a tree structure (a lot of pointers)Qt - 序列化树结构(很多指针)
【发布时间】:2012-07-24 21:57:36
【问题描述】:

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

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?

【问题讨论】:

标签: c++ qt serialization qt4 tree


【解决方案1】:

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

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

顺便说一句,很抱歉做出这个答案而不发表评论,但我还不能写问题 cmets ;]。

【讨论】:

    【解决方案2】:

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

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

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

    我觉得有点 hacky,但我想不出更直接的方法来解决这个问题。

    【讨论】:

      猜你喜欢
      • 2020-09-12
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 2020-10-12
      • 2018-05-30
      • 1970-01-01
      相关资源
      最近更新 更多