gpt4 book ai didi

c++ - 如何在 C++ 中序列化树结构?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:50 25 4
gpt4 key购买 nike

我正在尝试序列化/反序列化游戏场景以进行网络发送/接收以及从磁盘保存/加载到磁盘。

我的游戏引擎使用节点和组件,因此它们是唯一需要序列化的对象。场景可能如下所示:

Root Node
- Node
- SpecializedComponent
- SpecializedComponent
- Node
- Node
- Node
- Node
- Node
- Node
- Node
- SpecializedComponent
- Node

一个节点基本上是这样的:

class Node {
map<String, Node> mChildren;
map<String, Component> mComponents;
uuid_t mId;
Node* mParent;
};

SpecializedComponent 基本上是这样的:

class SpecializedComponent : public Component {
uuid_t mId;
Node* mNode;
};

我想使用 YAML 或 JSON 作为我的文本表示形式。我有 Qt、Boost 和我想要的任何其他库,因此依赖性不是问题。事实上,节点已经是 Q_OBJECTS 所以我有反射(reflection)。

尽管反射(reflection),将其正确反序列化回 C++ 树结构似乎是个问题。

最理想的是,我想要一个优雅高效的解决方案来将这样的结构序列化/反序列化为二进制或文本格式。

最佳答案

下降递归解析器通常是处理重建部分的更简单和足够强大的选项。我可以尝试设置一些代码以具体的方式显示,在伪代码中是这样的:

 Node *parse(stream s) {
content = new Node;
s >> content >> nsons;
for (int c = 0; c < nsons; ++c)
content->addChild(parse(s));
return content;
}

当然,当一个组件被读取时,我们必须检查类型。

关于c++ - 如何在 C++ 中序列化树结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7866218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com