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

  • Авто

    Начинаешь немного иначе смотреть на дорогу и стиль вождения после того как ты еле успеваешь затормозить перед едущей впереди машиной и думаешь “вуух… пронесло…” и внезапно видишь в зеркале заднего вида машину, которая не успела затормозить и врезается в стоящий за тобой биммер… Этот стук нельзя спутать ни с чем… В общем надо ездить аккуратно…

  • Природа

    Как здорово, все-таки, вырваться из этого города на природу. Пожить в лесу, в палатке – это круто. Нас собиралось изначально почти десять человек, но приколы начались, когда Ленка с Олегом сказали, что на самом деле им надо идти на день рождения их друга (тоже на озеро), а Серега и Наташа отморозились по причине работы и…

  • Android x86 emulator и google maps/play services

    Google и intel сделали крутую штуку – образы андроида для x86 atom, которые работают весьма шустро на x86 платформе, в отличие от тормозных armv7. Но счастье резко заканчивается, когда нужно делать приложение, использующее google apis (maps, play services) – x86 образы есть только для чистого андроида. Тем не менее, гугол (который поиск) помогает решить эту…

  • Хочу машину-2

    У меня началась 2я итерация приступа под названием “Хочу купить новую машину”, сегодня весь день лазил в нете по доскам обьявлений и форумам – все искал ее, пока не очень успешно, но ничего, я думаю, что еще все впереди, теперь надо начинать задавать вопросы. Обязательно наступит день, когда предложат что-то стоящее и я куплю новый…

  • Последние события

    Что-то все собираюсь написать в ЖоЖо и все время руки не доходят, поэтому просто вкратце отмечу последние события. В субботу с отцом наконец залезли на крышу, чтобы смонтировать там тарелку. После установки ее на балконе и предыдущей, не очень удачной попытки, установки на крыше все прошло как по маслу. Залезли, поставили на кронштейн сборную систему…

  • Размышления в конце рабочего дня

    Сижу и думаю, почему, когда хочется приехать на работу часам к 9 утра получается приехать только где-то в 11. При этом самая ужасная вещь – это то, что я до сих пор не выспался… Отвратительное состояние, с утра злился на всех без веской причины, нахамил Сержу, когда он спросил, почему до сих пор я не…