C ++ 11 — C ++ Сериализация с Cereal — Как лучше сериализовать полиморфные классы

Я собираюсь реализовать сериализацию моего графа объектов (на самом деле дерево) с Зерновой.

Cereal не поддерживает сериализацию необработанных указателей (объектов, на которые указывают эти указатели). Моя текущая идея состоит в том, чтобы иметь getType() Функция на объектах, чтобы узнать их тип, а затем построить их с фабрикой в ​​соответствии с их типом.

После создания правильного объекта мы можем инициализировать его архивом.

Это определенно не идеальное решение, поскольку каждый класс должен возвращать уникальный тип из своего getType() функция.

Как можно улучшить эту архитектуру?

template <class Archive>
void save( Archive & ar, const unsigned int version ) const
{
ar << _obj->getType();
ar << *_obj;
}

template <class Archive>
void load( Archive & ar, const unsigned int version )
{
ObjType type;
ar >> type;
_obj = Factory::createWithType(type);
_obj->load(ar, version);
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector