Повысить десериализацию в динамические типы

По этой ссылке вы можете найти поддержку сериализации и десериализации. Но в методе десериализации нам нужно дать конкретный объект класса для десериализации. Пример: newg

gps_position newg;
{
// create and open an archive for input
std::ifstream ifs("filename");
boost::archive::text_iarchive ia(ifs);
// read class state from archive
ia >> newg;
// archive and stream closed when destructors are called
}

Поскольку в C ++ нет базового класса, такого как Object в C #, как я могу десериализовать в общий объект и затем привести его к типу?

Насколько я могу, я могу создать собственный объект вызова класса и наследовать все другие классы от него, но даже в этом случае будет ситуация десериализации 2 раза. Есть ли решение этой проблемы?

1

Решение

Boost.serialization должен быть задан конкретный класс. Поскольку в С ++ нет виртуальных конструкторов, десериализатор должен знать, какой объект создать. Общий предок тоже не поможет. Объект должен быть создан до десериализации.

Если вы хотите сериализовать и десериализовать иерархии классов, вы должны явно написать Id класса при сериализации объектов и при десериализации — явно прочитать этот Id, чтобы принять решение — какой объект создать и десериализовать.

2

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

Вы можете десериализовать в базовый класс, если сериализуете / десериализуете указатели на объекты. Boost затем автоматически создает Id и т. Д. Механизм описан Вот

0

По вопросам рекламы [email protected]