Повысить исключение «ошибка потока» в архиве сериализации / десериализации - PullRequest
5 голосов
/ 19 мая 2011

У меня следующая проблема ..

У меня есть файл с именем A.h и файл B.h. каждый содержит некоторую структуру, подобную этой: (структуры внутри двух классов различны)

struct Base
{
    friend class access;

    template <typename Archive>
    void serialize(Archive& ar,const unsigned int version)
    {
        ar & fieldLength;
        ar & fieldMD;
        ar & fieldTime_Stamp;
    }   
   public:
        unsigned int fieldLength;
        unsigned int fieldMD;
        unsigned int fieldTime_Stamp;

       virtual void f(){} //to be polymorphic the struct
};

struct Derived:public Base
{
    ...
}

Так что я сериализирую структуру классическим способом:

....

std::ostringstream archive_stream;

boost::archive::text_oarchive archive(archive_stream);

archive.register_type(static_cast<Derived*>(NULL))

archive <<p;   // where p is a pointer to Base

СЕЙЧАС ПРОБЛЕМА ... на стороне десериализации я следую той же (обратной) процедуре ... если я десериализовываю сингулярно структуры в Ah (без включения в проект Bh) и структуры в Bh (без включения в проект Ah), все работы ... .but, если я включаю в проект оба класса, десериализация работает для одного класса, но выдает «исключение ошибки потока» в инструкции «архив >> m;» для других ... кажется конфликт в классе регистрации или что-то вроде этого ... Есть идеи? Спасибо ...

1 Ответ

2 голосов
/ 31 мая 2011

Вы сериализовали базовые данные в функции сериализации производного класса?

ar & boost::serialization::make_nvp( "base", boost::serialization::base_object< Base >( *this ) );

И я не знаю, поможет ли это, но я использую

BOOST_CLASS_IMPLEMENTATION(x, boost::serialization::object_serializable);
BOOST_CLASS_TRACKING(x, boost::serialization::track_never)

для регистрации классовкак сериализуемый.Надеюсь, что поможет: 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...