Я не верю, что сериализация в Boost делает это очень умным способом. Посмотрите на функцию base_object
- кажется, вы должны вручную сказать, что такое базовый класс. Отсюда очевидно, как получить тот же указатель. Также обратите внимание, что для сериализации производных классов правильно сохраняются только виртуальные классы, таким образом, не виртуальные, как стандартные типы макетов, вы должны сериализовать производный класс. Я понятия не имею, обрабатывают ли они общий указатель в этом случае.
Итак, основная идея заключается в том, что если у вас есть виртуальный класс, база должна иметь своего рода «последовательную» функцию. Если вы приведете к этой базе, у вас будет общий указатель, и вы все равно сможете вызвать виртуальную последовательную функцию.
Возможно, вам лучше создать глобальный шаблон identify<T>
и специализировать его для всех типов, которые в нем нуждаются. Может быть подвержен ошибкам, но ни в коем случае метод повышения не позволяет избежать ошибок.
Я проделал большую работу с расширенной сериализацией, но избегал логики указателей - это просто сбивало с толку, поэтому я в принципе просто не выполняю этот уровень сериализации (нет указателей в моих сериализованных данных).