5
我有以下問題。Boost序列化/反序列化存檔「流錯誤」異常
我有一個名爲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中的結構(不包括在項目中)所有的作品......但如果我在項目中都包含這兩個類,則反序列化對一個類有效,但會在「arc」指令中拋出「Stream error exception」蜂房>> m;「對於其他...這似乎是在註冊類或類似的東西這樣的衝突... 任何想法?謝謝...
顯示您的實際反序列化代碼。 – ildjarn 2011-05-19 07:03:08
std :: istringstream archive_stream(mex); // mex是從套接字接收的序列化數據 \t boost :: archive :: text_iarchive archive(archive_stream); archive.register_type(static_cast(NULL)); ... \t Base * m; 檔案>> m; –
marco
2011-05-19 07:07:35
我觀察到我通過archive.register_type()註冊了類,儘管我在單獨的進程中創建了兩個(本地)text_iarchive(我使用fork調用)......實際上,如果我評論第二個過程的註冊碼,所有作品...怎麼可能? – marco 2011-05-19 09:43:05