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

  • Ghost in the shell:SAC 2nd GIG

    Начал смотреть второй сезон сериала, мне показалось или он действительно стал более атмосферным киберпанком? Вообще пока нравится, прикольно так, затягивает зрелище, первый сезон не было такого желания смотреть как сейчас второй. Начинает мешать работать 🙂 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Румыния: день 4

    29.04.2008 Вторник, 11:00 (Синая) Мы покинули гостеприимную Синаю и взяли курс на Бузау – грязевые вулканы. Выходя из гостинницы мы встретили гидов и знакомых представителей Укррома, через которых мы, собственно, и открывали визы. Нам доверительно сообщили, что администрация посчитала нас очень тихими и спокойными (наверное они ещё не нашли прожжённый кальяном ковёр). Хотя, с другой…

  • Hammerwars 2.0

    Ура, вот мы и добрались до полок, подходи, налетай, хаммерварс покупай 🙂 А пока ждём прохождения рейтинга чтобы в америку попасть. Чорт, кто бы мог подумать, что в наше время повсеместной цифры и интернетов некоторые службы работают по обычной почте?! Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on…

  • PS3 Mediaserver

    Давно я не постил ничего 🙂 Расскажу я про одну полезную программку, благодаря которой моя “чёрная прелесть” (PS3) стала ещё более прелестной. PS3 Mediaserver (http://ps3mediaserver.blogspot.com/). Хороша тем, что умеет стримить *.mkv файлы на приставку без всяких действий с шаманским бубном и/или установкой тыщ миллионов кодеков. Написана на джаве, поэтому просит поставить JVM, но, скажу я…

  • Интернет

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

  • Сроки

    Я начинаю думать, что “уровень крутизны” зависит от того насколько поставленные сроки отличаются от реальных – чем меньше разница, тем лучше. И судя по тому, что я собирался к концу этой недели закончить плагинчик для внутреннего тестирования, но это не удалось, то расти мне ещё и расти 🙂 Share this post: Share on X (Twitter)…