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

  • Отчет о карпатах

    В воскресенье я был в карпатах. В субботу вечером мы с одногрупницей Иркой сели в поезд и поехали в карпаты кататься на лыжах на один день. В 7:30 мы выпрыгнули из вагона в Славском и потопали в поисках кафешки, чтобы попить кофе и раздуплиться после поезда, поскольку мы ехали в купе с молодыми ребятами и…

  • Застой

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

  • Rhythm of War

    Анонс, штоли 🙂 Надеюсь, что скоро релизнемся. http://rhythmofwar.com Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • проблема с компиляцией glBindBufferARB

    Возникла аццкая проблема – вот этот кусок не компилился glGenBuffersARB((GLsizei)1, &idx); постоянно вываливая ошибки error C2664: ‘void (GLsizei,GLuint *)’ : cannot convert parameter 1 from ‘int *’ to ‘GLsizei’ error C2664: ‘void (GLsizei,GLuint *)’ : cannot convert parameter 2 from ‘int *’ to ‘GLuint *’ если второе еще понять, можно, то первое ни в какие…

  • 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…