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

  • Metallica

    Я открыл для себя металлику. Как я раньше мог её пропустить?… Офигенный музон, посыпаю голову пеплом и навёрстываю упущенное теперь 🙂 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Luabind bugs and fixes

    Сегодня утром на меня возложилась задача перевести проект на рельсы нового буста 1.33. Это не было бы большой проблемой, если бы не луабинд, который с ним не дружит. Во всяком случае версия, лежащая на их сайте, пришлось выкачать из CVS последнюю ревизию и скомпилировать у себя. С этим проблем не было. Проблемы начались, когда я…

  • VirtualKD + Windows 10

    Если вдруг нужно, чтобы взлетел VirtualKD с гостевой Windows 10, то после инсталляции оного внутри машины, нужно ещё обязательно выполнить bcdedit /dbgsettings serial, иначе кина не будет. Сэкономит часик времени на рисчёрч “а чо оно не работает”. Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on…

  • Лыжи

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

  • Константин

    Наконец-то посмотрел фильм про своего тезку. Ощущения неоднозначны – с точки зрения религии – это что-то непонятное, тут правда надо уточнить, что это мое имхо, поскольку к богословию я отношения не имею. Церковь в виде офисного здания поражает, при чем не в лучшую сторону, я бы сказал, что вижу такое впервые, но буквально полгода назад…