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

  • Румыния: День второй

    27.04.2008 Воскресенье, 07:30 (Синая) Утро просто не успело выдаться тяжёлым, потому что, как только мы пришли в чувства, к нам приехали коллеги из шкода-клуба. Мы позавтракали и отправились в гости к графу Дракуле, Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Лытдыбр псто

    Чото модно стало такие штуки в ЖЖ постить, я тож так сделаю, потому что выглядит правдоподобно весьма 🙂 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Открытие сезона 2009

    Съездил я тут, на выходных в карпаты, открыть сезон горнолыжный. В связи с ацким циклоном температура у нас была -15 -20, снега на дорогах хоть завались и решили мы поехать на запад, покататься. Дорога была тяжеловатая, местами снег-лёд – машина тупо не останавливалась… Приехали мы в Славское, на Тростян, а там, оказалось, что снега то…

  • Карпаты весной

    На последних выходных я снова ездил в Карпаты, снова в Пилипець, но жили в другом домике – теперь с туалетом внутри, что очень удобно в холодную погоду 🙂 Эта поездка оказалась более необычной чем остальные – в этот раз в поезде мы ехали в разных вагонах, и если туда мы ехали в соседних вагонах, то…

  • PS3 Mediaserver

    Давно я не постил ничего 🙂 Расскажу я про одну полезную программку, благодаря которой моя “чёрная прелесть” (PS3) стала ещё более прелестной. PS3 Mediaserver (http://ps3mediaserver.blogspot.com/). Хороша тем, что умеет стримить *.mkv файлы на приставку без всяких действий с шаманским бубном и/или установкой тыщ миллионов кодеков. Написана на джаве, поэтому просит поставить JVM, но, скажу я…

  • Мойка машины

    Ездили сегодня с Олегом помыть машину, по ходу к нам прибился Виталя, который был готов на все, лишь бы не учить математику. Вот так мы с Олегом мыли машину А это Виталя отдыхал от математики, и исполнял маленькое наказание: Было прикольно – заработали бутылку водки – чувак на Chevrolet Takuma решил заехать поближе к лесу…