2016-05-31 1 views
0

У меня 2 полиморфные типы, которые являются производными от примерно так:увеличить :: сериализации и базы/получены отношения не зарегистрированы

class Base1 {...}; 
class Base2 {...}; 
class Derived1 : public Base1 {...}; 
class Derived : public Derived1, public Base2 {}; 

я использую

BOOST_CLASS_EXPORT_KEY(Derived) 

в файле заголовка сериализации для производных. и

BOOST_CLASS_EXPORT_IMPLEMENT(Derived) 

для перевода блока, реализующего функцию сериализации свободную для Derived, который просто называют base_object для обоих оснований. Я делаю это для NONE Base1, Base2, Derived1. Я только создаю экземпляр функции для архивов, необходимых для boost :: mpi. Все это в общем объекте, который связан для генерации исполняемого файла.

Сохранение в архиве сбой при использовании указателя Base1 *.

Во время отладки я вижу в

boost/archive/detail/oserializer.hpp 

что вокруг линии 393, производный тип правильно зарегистрирован, но исключение только чуть позже в 411, где он говорит

"the base/derived relationship hasn't be registered" 

и исключение показаны типы

Derived 

и

Base1 

Как я могу зарегистрировать отношения самостоятельно?

ответ

0

Извинения, я действительно пропустил вызов base_object в реализации сериализации для Derived1.

сейчас он работает как шарм,