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

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

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

  • Чуток наболело (С++)

    Давно я, что-то не постил ничего 🙂 Вот читаю я разные форумы, каналы чатов и возникает у меня вопрос – почему так много людей зациклились на С++? Это отличный язык для решения своих задач, но когда на нём начинают извращаться метапрограммированием, или пишут адские обёртки, обвязки для типа Pure OOP – зачем? Если очень хочется…

  • espresso test failure

    Если внезапно вы решили подключить espresso и начать писать тесты, а потом после очередных манипуляций вдруг тесты приложения перестали запускаться и начали бросать исключение NoClassDefFoundError YourActivity, то вполне вероятно, что может спасти совершенно нелогичное действие: Добавить исключения суппорт либы в gradle для компиляции espresso (в моём случае espresso-contrib) androidTestCompile (‘com.android.support.test.espresso:espresso-contrib:2.2’) { exclude group: ‘com.android.support’ exclude…

  • Новый гот

    Не, таки многое зависит от нас лично, если отнестись к НГ как к празднику, то и настроение праздничное, что есть гут 🙂 Вчера был на работке, отметили небольшим коллективом уход года, ничо так – интересный процесс получилсо, еще мне подарили блокнот, нафиг он мне надо, пока не знаю, но приятно 🙂 А сегодня иду к…

  • Дурдом

    Сегодня на работе утром небыло инета… Хотел написать в ЖЖ, но инет отсутствовал, а когда появился, оказалось, что на моей тачке все-равно нет инета, а так как админ до вечера не появился, то я так и не запостил новости с работы, а счас они уже устарели 🙂 Share this post: Share on X (Twitter) Share…

  • На роликах по городу

    Выходные определённо удались. Была так называемая “дневная” – собирается куча народа на роликах и едет по определённому маршруту. Пикантность этого раза заключалась в том, что было 120 человек 🙂 К нам высадился десант из мск в количестве 60 человек, ну и местных тоже насобиралось столько же – поэтому получилось очень фаново. Не каждый день выходит…