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

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

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

  • Дурдом

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

  • НГ

    Кажись новый гот таки наступил 🙂 Основная гульня уже отошла, остались более “стандартные праздники”. Хотя я, похоже, еще не протрезвел окончательно 🙂 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit

  • Закрытие сезона

    Сегодня приехал из гор – опять на выходные катались в Карпаты. Думаю, что в этом сезоне уже больше туда не поедем 🙂 Отдохнули отлично – в субботу стояла солнечная погода, было где-то +3, но снег был отличным. Один этот день стоил недели отдыха, спустились раз 15. На следующий день было похуже, снег уже подмок и…

  • msi wind + touchscreen

    Не прошло и года, как я, наконец-то, сделал это! Скрестил свой нетбук с тачскрином, теперь у меня можно тыкать пальцами в экран и это будет иметь магическое действие! Вчера чуть попробовал с навигационными программами – результат радует 🙂 Оно, конечно, не мульти-тач и не ацкий сенсор, но как для хорошего помощника в машине пойдёт на…

  • Metallica

    Я открыл для себя металлику. Как я раньше мог её пропустить?… Офигенный музон, посыпаю голову пеплом и навёрстываю упущенное теперь 🙂 Share this post: Share on X (Twitter) Share on Facebook Share on LinkedIn Share on Email Share on Reddit