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

  • Build Succeeded

    Наверняка все программисты рано или поздно сталкиваются с тем, что запускают билд, который должен идти пару минут, после чего открывают браузер и читают “форумы/новости/что-то ещё” пока идёт сборка. Через 15 минут вспоминают, что был запущен билд, но 13 минут уже потеряно. В общем надоело терять из-за таких вещей время и вместо того, чтобы запретить доступ…

  • Отчёт. День первый: дорога

    Впечатлений за отпуск накопилось море, поэтому буду выдавать по мере переработки мозгом 🙂 Заодно запихивать под кат, т.к. букв много и не всем, наверно, интересно. Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Турция

    В субботу 10 сентября я вернулся из Турции – впечатлений море 🙂 Когда мы туда прилетели, прошли паспортный контроль и пошли на таможню, то оказались на улице, там нет въездной таможни 🙂 точнее она есть, но никого не проверяет. То что это – азия стало ясно, когда наш автобус по дороге в отель остановился на…

  • seti@home

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

  • Многопоточность

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