我有一個提升序列化的小問題。有許多示例顯示如何通過簡單地使用BOOST_CLASS_EXPORT和BOOST_CLASS_EXPORT_IMPLEMENT來通過基類指針序列化派生類指針。這工作正常,沒有任何問題。通過取消引用的基類指針提升序列化
但是,我不想序列化一個指針,因爲另一端的反序列化應該再次通過一個指針,然後boost會創建一個新的序列化對象實例。
我可以序列化一個解除引用的指針,然後在沒有問題的情況下再次反序列化一個現有的對象實例,並且不會創建新的實例。但是,當解引用的指針位於基類之上時,派生類不會像序列化指針時那樣按序列化。
工作例如:
Class A;
Class B : public A;
A* baseClass = new B();
ar << baseClass // works perfectly
不工作例如:
Class A;
Class B : public A;
A* baseClass = new B();
ar << *baseClass; // only A is serialized
我可以得到它通過簡單的序列化在派生類中一樣工作:
B* derivedClass = new B();
ar << *derivedClass; // works fine
但所有引用我在我的結構中有基類類型。另外,我不能序列化指針,因爲在反序列化時我不需要實例化新的objetcs,只需在現有實例上「覆蓋」內容。
我試圖序列化指針並試圖通過現有的實例反序列化,但這是行不通的。當我說反序列化在現有的情況下,我的意思是:
A* baseClass = new B();
// baseClass is used in the program and in a given moment, its contents must be overwrite, so:
ar >> *baseClass;
正如我所說的,反序列化時,我不需要基類的新實例。那麼,有什麼辦法可以使這個工作?
嗨,有點晚了,但我剛剛發現了這個問題。我面臨着完全相同的問題......我認爲這個問題可以通過引用來解決,但是通過對基類的引用進行序列化並不適合我。你能解決這個問題嗎? – TomasG
我終於使用了@TomasG指出的解決方案。基本上是在我想要以這種方式序列化的類中添加序列化和反序列化虛擬函數。幸運的是,他們很少。 –
感謝回答,可惜沒有更優雅的解決方案。 – TomasG