Я выполняю сериализацию / десериализацию объекта подкласса по указателю на его базовый класс. Все работает хорошо, но я упускаю одну особенность: добавление параметра времени выполнения в конструктор десериализованного объекта, пример:
class Base {
public:
Base(AnotherClass* another)
:m_another(another)
{}
protected:
AnotherClass* m_another;
};
class Derived : public Base {
public:
Derived(AnotherClass* another)
:Base(another)
{}
Derived()
:Base(nullptr)
{}
private:
/* different other members */
};
BOOST_CLASS_EXPORT(Derived);
...
Мой обычный способ создания производного объекта:
Base* obj = new Derived(anotherObj);
Десериализация происходит так:
Base* obj;
ar >> obj;
Будет вызван конструктор по умолчанию (Derived ()), и десериализация продолжается, НО m_another не десериализован, его следует передать конструктору, все остальные поля десериализовать.
Более того, я не могу установить m_another после десериализации, потому что это действительно влияет на десериализацию.
Я могу передать ссылку на anotherObj через глобальную переменную - безобразно, но работает.
Есть ли способ решить это не так безобразно?