Как сериализовать древовидную структуру в C ++?

Я пытаюсь сериализовать / десериализовать игровую сцену для отправки / получения по сети и сохранения / загрузки с / на диск.

Мой игровой движок использует узлы и компоненты, и поэтому это единственные объекты, требующие сериализации. Сцена может выглядеть так:

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, поэтому у меня есть отражение.

Несмотря на размышления, десериализация его должным образом обратно в древовидную структуру C ++ кажется проблемой.

В оптимальном случае мне нужно элегантное и эффективное решение для сериализации / десериализации такой структуры в двоичный или текстовый формат.

6
задан svenstaro 23 October 2011 в 12:47
поделиться