Serialization

Сегодня, наконец-то, закончил делать сериализацию для всяких игровых объектов – в том виде, как я ее вижу. Идеи были вытащены из буста, но так, как в тех шаблонах сам черт ногу сломит, то пришлось делать “по пониманию”.

Делалось это потому что реально существует проблема того, что когда геймдизайнер просит вынести ему новые параметры для настройки в конфиг, то это вызывает некоторые проблемы. Надо добавить аж три-четыре строчки 🙂
На самом деле реально проблема в том, что неясно бывает куда в иерархии игровых объектов впихнуть новый параметр и куда в хмл.

Фактически был реализован класс Archive, который содержит в себе несколько перегруженных операторов для записи POD-типов и перегруженный шаблонный оператор для сохранения всего остального.

template
Archive& operator>>(T& t)
{
t.DeSerialize(*this);
}

Вот такая незамысловатая реализация.

Реализация сериализации не-POD типов оставлена на “пользователя” и выглядит так же как и в бусте
void Square::DeSerialize(Archive& ar)
{
ar >> m_Rectangle;
ar >> m_Color;
//…..
}

Стоит добавить, что на самом деле реализация немножко не такая, из-за того, что в хмл надо хранить пары имя-значение, поэтому еще есть структурка, которая хранит имя переменной и ее значение, т.е.
ar >> MAKE_NVP(m_Rectangle); // NVP – Name-Value-Pair

Плюсом сериализации, имхо, является то, что мы автоматом получаем вычитывание целой иерархии объектов при том, что код становится проще и лучше структурированным.
Еще большим позитивом оказалось то, что глядя в сериализованный хмл начинаешь видеть огрехи в реализации архитектуры.

Similar Posts

  • Фигня…

    Я выложил не ту версию гоблина… А так как я счас не дома, то новую версию смогу выложить только завтра 🙁 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Так вообще

    Что-то давно я свой ЖЖ не обновлял, правда есть небольшая отмазка – сессия, не было времени и все такое 🙂 Но как показала практика – отмаз, что нет времени – это полный отстой, поскольку, на самом деле, при желании, время можно найти для чего угодно и уж тем более для заполнения ЖЖ, надо просто захотеть….

  • Пилипец (Карпаты)

    Съездили мы составом из 19 человек в Пилипец, Воловецкого р-на, что на Закарпатье покататься на тех самых горных лыжах. Прогресс там на месте не стоит, открыли ещё 2 трассы, правда, для новичков, но, зато, монтируют креселку на вершину “основной” горы. Она будет тягать почти туда же, куда сейчас это делает бугель, но зато появится возможность…

  • Almost Лето

    В Киеве уже почти неделю +28, именно столько показывает термометр в гугл-десктопе и я бы подумал, что он сломался, но в машине термометр показывает столько же. Интересно, что если раньше жара вызывала непреодолимое желание свалить куда-нить подальше, то теперь всё как-то спокойно – меня практически всё устраивает, надо только море под бок перенести, и всё…

  • Console vs PC

    Почему я думаю, что консоли рано или поздно окончательно похоронят PC. А потому что у первых юзабилити (удобство и простота использования) в стопицот раз выше! Как происходит процесс “поиграть” на приставке. Покупаем игру в магазине, вставляем диск в привод, нажимаем кнопку “поиграть” игра стартует и через секунд 30 мы уже смотрим вступительные ролики и игровое…

  • КРИ 2K7

    Что-то смотрю модно стало писать отчёты про КРИ, напишу-ка и я один 🙂 6.04.07 Приехали в мск и поехали к ddima, который согласился меня с stalker_taurus принять у себя. Забросили весчи и поехали все вместе на конференцию. Первый день был каким-то не очень внятным, лекций почти не было, а то, что было – как-то не…