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

  • Природа

    Как здорово, все-таки, вырваться из этого города на природу. Пожить в лесу, в палатке – это круто. Нас собиралось изначально почти десять человек, но приколы начались, когда Ленка с Олегом сказали, что на самом деле им надо идти на день рождения их друга (тоже на озеро), а Серега и Наташа отморозились по причине работы и…

  • Кругом война, а я на работе :)

    Сегодня на работу приехали американские белые люди, которым очень хотелось увидеть в наших лицах клоунов, обезьян и прочих акробатов, почему-то это настолько важно, что меня даже выдернули с военки. В принципе через некоторое время я даже стал рад – у меня опять все начало работать и получаться и я даже настроил Lotus Notes – при…

  • Экспортёр для XSI

    В свете последних тенденций борьбы с пиратством да и просто исходя из экономии денег (или их отсутствия), стало очень актуально переходить с мегадорогих пакетов разработки на что-то более дешёвое. Поэтому было решено написать плагин не для 3DMax или Maya, а для менее популярного XSI, но зато более финансово доступного. Оказалось что всё очень даже неплохо….

  • Грубая сила

    Дибажил я тут одну программку. Вылетала она при выходе, при чём совсем в том коде, который писался нами, и от которого есть исходники. Вылетала она в коде движка, от которого есть только либы и заголовочные файлы. Происходило всё очень просто – access violation writing location 0xfeeefeee, что обозначает попытку записи в уже освобождённую память. В…

  • Internet sux

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

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

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