Я использую boost для сериализации \ де-сериализации нескольких классов на диск. Я занимаюсь рефакторингом многих классов, которые требуют изменения иерархии классов. Я надеюсь, что следующий псевдокод достаточно ясно описывает мою ситуацию:
Первоначальный дизайн был похож на следующий:
class Alpha : public BaseOne, public BaseTwo
{
//member data omitted
void serialize(Archive & ar, const unsigned int version);
}
inline void Alpha::serialize(Archive & ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseOne);
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseTwo);
// also serialize member data
}
class Beta: public Alpha
{
//member data omitted
void serialize(Archive & ar, const unsigned int version);
}
inline void Beta:::serialize(Archive & ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Alpha);
// also serialize member data
}
Иерархия классов изменилась на следующую:
class Alpha : public BaseOne
{
void serialize(Archive & ar, const unsigned int version);
}
class Beta: public Alpha, public BaseTwo
{
void serialize(Archive & ar, const unsigned int version);
}
Можно ли десериализовать данные, сохраненные в предыдущей иерархии классов, в новый дизайн?
С уважением, Джон