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

  • Застой

    Блин, после того как сдал военку как-то застойно все стало – ничего не происходит такого, ну разве что уже два раза я приходил на работу проспав лишь 2 часа. Ацкое чувство однако – весь день сидишь и думаешь – скорее бы вечер, чтобы заснуть. Слон сцука дал мне игруху – теперь вся работа делается раза…

  • ipod

    Прибыл утром на почту, забрал вожделенную бандероль, которой оказался большой бумажный пакет с надписью used ipod. Доехал до работы, распаковал – действительно, внутри лежит ipod photo 60 gb, который я и заказывал, в комплекте кабель подключения и наушники. Все как обещал продавец. Включил – работает 🙂 Обошлось это счастье мне в 98.5 фунтов английских, или…

  • Пластиковые карточки

    Сегодня в банке взял выписку со счета карточного. Надо было для того, чтобы подтвердить счет на пейпеле. Решил заодно подсчитать расходы по Турции, точнее перевод валют. Вывод меня порадовал: Карточка оказалась выгоднее налички Вот подсчеты Выписка: Сумма: 165 YTL Комиссия: 5.72 грн. Общая сумма: 578.15 грн Считаем: 165 лир – это 114 долларов по курсу…

  • starcraft II beta

    Вчера утром в почте я обнаружил инвайт на бета-тест второго старкрафта. Очень приятная неожиданность, ну очень! 🙂 Вечером я до него наконец-то добрался и сел чуток “потестить”. Итак, в бете доступен только мультиплеер, работает автоматическая система подбора противника по уровню профессионализма, можно обойтись без неё, но я до этого пока не добрался, поставил себе новичка…

  • Мои выходные

    Блин, на выходные было столько разных идей – съездить на дачу, съездить в деревню, сходить на пляж, в кено или еще куда. В результате всю субботу и часть воскресенья проторчал на работе. Оставшуюся часть выходных провел за оверклокингом. Гонял процессор и свежеприобретенную видеокарточку. Водяное охлаждение рулит 🙂 Share this post: Share on X (Twitter) Share…

  • Немного авантюризма

    Вчера в 3 часа ночи меня к себе в офис пригласил KVaks, сказал, что если приеду, то даже подарит свою книгу 🙂 Потом он выслал за мной такси. Интересно, что я согласился и приехал, т.е. в 3:30 ночи я был на другом конце Киева и смотрел на PSP 🙂 а также проникался крутизной книжки про…