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

  • Старкрафт

    Сегодня играл на чемпе по старкрафту, УСЛ – Лига ньюбов – было интересно, теперь лига делится на две подлиги в квалификационной партии – кто выиграл – тот идет в верхнюю часть, кто проиграл – в нижнюю. Играть стало интереснее, поскольку соперники теперь на уровне – тебя не выносят в первые 3 минуты игры 🙂 Короче…

  • VS2005 Automation

    Я пишу Add-in для студии, который бы позволил более эффективно компилировать проекты gcc компилятором, которым мы пользуемся. На данный момент самой важной и насущной проблемой является управление компилятором, получение текущих настроек и установка своих, и вот тут начинаются проблемы 🙁 Для любого Add-in доступен объект типа EnvDTE2, который предоставляет доступ ко всему, что есть в…

  • Perl

    Вчера у нас был кранч, по ходу пьесы оказалось, что нужно для игры написать скрипт, в который забить полтора десятка компонент с разными настройками – самая настоящая Monkey Job. И тут я вспомнил про то, что умею писать на перле. Написал скриптец для генерации кода за 15 минут и сэкономил эдак час времени, а может…

  • Про автобаны

    Пока память ещё немного свежа – выдам фактические факты по автобанам, которые нам довелось испробовать. Итак: Венгрия – нужно до въезда найти заправку и купить там “матрицу-виньетку”, минимум 4 дня, стоит 1520 форинтов – это около 5 евро. После этого можно кататься сколько угодно. Система там простая – при покупке номер вашего автомобиля вносится в…

  • Протокол

    “Добрий день, молодший сержант Петренко”, представился милиционер и добавил: “причина зупинки – перевищення швидкостi”, показывая при этом пластмассовую штуку, на которой светились цифры 85. “Будь-ласка пройдемте, составимо протокол”. Вот так вот на меня сегодня составили ни много ни мало – первый протокол 🙂 Теперь я тоже могу относиться к категории нарушителей правил дорожного движения. Надо…

  • VisualStudio add-in progress

    В создании “мегаплагина” для компиляции проектов при помощи gcc наступил важный момент. Наконец-то я закончил первую версию, т.е. эта штука сумела скомпилять наш проект и поддерживает минимально функциональность старого кривого модуля, который писался как makefile project wrapper. Можно приступать к внутреннему тестированию. Ура!!!!!!! Следующая версия должна будет быть более функциональной и прилизаной, чтобы можно было…