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

  • Motorola Droid Turbo XT1254 CDMA tuning

    У моего телефона почему-то после каждой перепрошивки слетают настройки EVDO на Интертелекоме, из-за чего нужно править настройки. Т.к. я всё время забываю процедуру, то решил её сохранить тут. Запускаем телефон в режиме BP Tools (из fastboot bootloader меню) Идём в Device Manager, выбираем устройство diag_mdm и ручками ставим драйвер Motorola QC Diag Port Запускаем DFS…

  • Отчёт. День третий-седьмой: Буковель.

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

  • Водяное охлаждение

    Вчера с искрами, огоньком и дымком приказала долго жить помпа водяного охлаждения домашнего компа. P400 из комплекта Thermaltake Big Water 745. Абыдно, тока летом прикупил и уже капец, теперь надо будет искать какой-нить аквариумный насос. Они вроде как должны подходить. Если кто что знает, посоветуйте плз 🙂 Share this post: Share on X (Twitter) Share…

  • Новый Год

    Ура, праздники наконец-то отгремели и можно подвести некоторый итог 🙂 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Хоккей

    Попёр меня хоккей роликовый совсем неподецки. Последний раз такой азарт и желание заниматься было весной, когда я просто ролики осваивал. Собсно клюшка собственная и шарик у меня уже есть, решил я прикупить ещё и более правильную защиту и футболку-кофту. С первым проблем нету, а вот второе… Я облазил пол-города и не нашёл! В нашем любимом…

  • VS2005 Automation

    Я пишу Add-in для студии, который бы позволил более эффективно компилировать проекты gcc компилятором, которым мы пользуемся. На данный момент самой важной и насущной проблемой является управление компилятором, получение текущих настроек и установка своих, и вот тут начинаются проблемы 🙁 Для любого Add-in доступен объект типа EnvDTE2, который предоставляет доступ ко всему, что есть в…