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

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

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

  • Навеяно слонменами и бетменами

    Народ, если вы знаете, что бедмена нету, то почему вы решили, что все остальное должно существовать на самом деле? Откуда идет гон на то, что таких костюмов не существует, машины так не прыгают, а телки тают от одного взгляда? ЗЫ: Ну и мысли с бодуна 🙂 Share this post: Share on X (Twitter) Share on…

  • Direct sound

    Мое серьезное знакомство с майкрософтом началось с дотнета. Я офигел насколько круто и удобно они сделали платформу, как легко и быстро все делается, в общем я понял, что мсовцы переродились. Но вот мне понадобилось вместо OpenAL писать под чистый DirectSound, я офигел 🙂 Целый день потрачен на то, чтобы банально загрузить звук в буфер и…

  • Крым

    Сегодня в шесть утра приехал из Крыма, что я скажу – море, даже если всего на три дня – это классно. В четверг днем сходил в центральные ЖД кассы и купил билет (на тот момент единственный) в купе, нижнее! На фирменный поезд 12 (оч. даже ничего так поезд), стоил он правда дороговато, но очень уж…

  • PSP Video

    Как бы я не любил эту приставку, но иногда она своей “юзабилити” ставит в тупик. Что может объяснить удобство просмотра видео на ней? Для того, чтобы глянуть ролик, его надо положить в папку MP_ROOT, внутри которой будет ещё одна дружелюбная – 100MNV01. И в неё вы кладёте заботливо созданный video.mp4 файл. Вот только он называться…

  • Пре-КРИ

    Что-то настроение перед кри какое-то не рабочее, вообще работать не получается, зато в старкрафт поигрался, правда не очень успешно 🙂 Теперь еще пару реплеев правильных гляну для размышлений и домой поеду. Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit