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

  • Future Today

    Вот оно будущее, уже можно потрогать руками более менее простым смертным: На этой картинке видно то, что называется HUD (Heads Up Display), дисплей, проецируемый на лобовое стекло – вещь доступная раньше только пилотам современных истребителей и игроков во всякие игры. Тойота начинает вставлять это в новые лексусы (не очень доступно да) и в новые приусы…

  • пушной жжод (+ немного орхетектуры)

    Пушной с его рамштайн-исполнением жжод неподецки, хорошие пародии творит 🙂 ЗЫ: Сегодня сделал первую кросс-платформенную птичку, часть движка, отвечающую за работу с файлами. Оно вроде и прикольно, и в то же время как-то не так выглядит, надо будет больше покурить тру-либы – злиб там, или пнг. Делал в си-стайле, ибо это все-таки библиотека и к…

  • Ночная по Киеву

    Ездил вчера-сегодня в “велороллерскую” ночную по Киеву. Это такая штука, когда собирается куча велосипедистов и ролиководов и катаются по городу по определённому маршруту. Езда идёт по дорогам общего назначения, то есть по тем, где ездят машины, но, в принципе, есть security группа – это опытные велосипедисты, которые ведут всех и стараются удержать их в некоторых…

  • PSP Video

    Как бы я не любил эту приставку, но иногда она своей “юзабилити” ставит в тупик. Что может объяснить удобство просмотра видео на ней? Для того, чтобы глянуть ролик, его надо положить в папку MP_ROOT, внутри которой будет ещё одна дружелюбная – 100MNV01. И в неё вы кладёте заботливо созданный video.mp4 файл. Вот только он называться…

  • погодка

    Что может быть лучше, чем дождь и +4 зимой? Только дождь и -4 зимой! Отковырять лёд со стёкол на машине становится нетривиальной задачей, дойти до этой самой машины тоже 🙂 Вчера на полном приводе было хорошо по этому щастью рассекать, сегодня на переднем с летней резиной было стрёмно 🙂 Share this post: Share on X…

  • Отчёт: Румыния 26.04.2008 – 1.05.2008 (день первый)

    Пролог На майские праздники составом из трёх человек (среди которых две дамы), мицу-клубников мы совершили тур на машине (mitsubishi lancer 9) по Румынии и Украине, 5 дней там и 4 здесь. Суммарно накатали 4300 километров, из которых 2500 пришлись на Румынию, средний расход бензина составил 6.2/100 по загранице и 7.3/100 по родине. Ночевали в гостинницах,…