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

  • Гоблин о журналистах

    Почитал статейку, которую налабал славноизвестный Гоблин. Задумался… Если так посмотреть, то все, что он описал происходит не только в журналистской среде, а и во всех остальных сферах жизни, например в геймдеве 🙂 Достаточно посмотреть на то, во что превращается форум gamedev.ru – а превращается он тоже в какое-то стадо, которым рулят те же подростки, которые…

  • 3G Модем GOBI 2000 в Украине

    Новый ноутбук меня обрадовал скоростью, но ещё больше порадовал наличием слота для модема и подготовленной антенной, а также уже Я начал изучать eBay на предмет подходящей мне железке и увидел дивного зверя – Qualcomm Gobi-2000: модем, умеющий и CDMA (EV-DO) и GSM (UMTS). Вся сила в прошивках, которые загружаются при старте – нужен один стандарт,…

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

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

  • Выпивка

    Вчера посидели в “орехе” с Олегом и Машей – сегодня я осознал, что смешивать пиво с коктейлями – это зло, может и меньшее чем смешивание с коньяком, но все равно – зло. Сегодня башка слегка гудит и хочется спать 🙂 Вот с этим мы смешивали:   Share this post: Share on X (Twitter) Share on Facebook Share on…

  • Отчёт о поездке в Одессу

    День первый: Адесса. На «женский праздник» мы отправились в ранне-весеннюю Южную Пальмиру. Выехали в четыре утра из Киева колонной из четырёх машин, впрочем красный лансер икс Ренегата сразу её сломал и рванул вперёд с криками «не могу я ехать 130 км/ч – это медленно», ну а мы оставшейся троицей неспешно «поползли». Почти всю дорогу нас…

  • После военки

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