4

我想實現一個序列化類,它接收一個對象並將其轉換爲二進制流並存儲在一個文件中。之後,該對象應該從文件重建。序列化C++對象

雖然這個功能是由C#中的BinaryFormatter提供的,但我想從頭開始設計我自己的Serializable類 。

有人可以指向一些資源?

在此先感謝

+0

你想支持的東西,如版本? –

+1

你不能。在C++中沒有反省(a.k.a.反射)。該工具允許創建通用序列化對象。沒有它,你必須添加序列化代碼到你想要序列化的每個類。 –

+5

您可以參考boost序列化庫來獲取C++高級序列化系統的示例。 –

回答

2

我一直在使用boost :: serialization庫一段時間,我認爲它非常好。你只需要創建這樣的序列化代碼:

class X { 
    private: 
    std::string value_; 
    public: 
    template void serialize(Archive &ar, const unsigned int version) { 
     ar & value_; 
    }; 
} 

無需創建反序列代碼(這就是爲什麼他們使用的&運營商)。但是如果你願意,你仍然可以使用< <和>>操作符。

另外,可以在沒有修改的情況下編寫一個類的序列化方法(例如,如果需要序列化來自庫的對象)。在這種情況下,你應該這樣做:

namespace boost { namespace serialization { 
     template 
     void serialize(Archive &ar, X &x const unsigned int version) { 
        ar & x.getValue(); 
     }; 
    }} 
+0

'模板'沒有參數?這是合法的嗎? – immibis

5

我想給你一個否定的答案。它不太有用,但它仍然可能。

我幾年來一直在使用boost序列化,這是我公司最大的戰略錯誤之一。它產生的輸出非常大,速度非常慢,它傳播了大量的依賴關係,使得一切都不可能編譯得很慢,然後因爲你有現成的序列化格式,所以很難脫身。此外,它在不同的編譯器上有不同的表現,因此從VS2005升級到2010實際上導致我們編寫兼容層,這也很困難,代碼很難理解。