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

  • FM-Transmitter

    Сегодня получил последний заказанный девайс – FM-Transmitter for ipod. В народе – фм-передатчик, нужен для того, чтобы в машине на радиоприемнике можно было слушать музычку с плеера. выглядит так Штука обошлась в 23 доллара с доставкой. Первые впечатления неоднозначны, с одной стороны штука сделана в секретных лабораториях гонг-конга с настоящим китайским качеством, с другой стороны…

  • Рефакторинг

    Рефакторинг на C++ является штукой нетривиальной, я бы сказал ужасной 🙂 Я потратил уеву тучу времени, чтобы переместить движок игры в дллку, и еще потрачу кучу времени на борьбу с линковкой с дллкой. Ужасно, но деваться особо некуда, надо было изначально писать менее связанный код 🙂 А теперь попала белка в колесо… Share this post:…

  • Rhythm of War

    Анонс, штоли 🙂 Надеюсь, что скоро релизнемся. http://rhythmofwar.com Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Разгильдяйство

    Текущая неделя оказалась на удивление расхлябанной. Не было сделано практически ничего, чуть доправлена интеграция со студией и всё. Зато наконец-то посмотрел бората и накачал кучу клипов e-type 🙂 Какой-то антикранч получается – наверно это тоже хорошо. Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Славское наносит ответный удар

    Состоялась ещё одна поездка в заповедный (за последние 5 лет мало что изменилось) горнолыжный курорт Славское, но в этот раз на целых 3 дня – с субботы по понедельник, о которых попробую вкратце написать. Если совсем кратко, то – мне понравилось. Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share…

  • Охота

    На выходных был в Ульяновке, ходили на открытие охоту – открыли, жалко только, что ни одной утки даже не видели, не то что подстрелили. Куда интересней было просто погудеть в Ульяновке – какая-то атмосфера там пьянящая. Мы с другом одним выпили по четыре бутылки пива – нас разорвало в клочья. Мы, мягко говоря, были удивлены…