2010-03-20 34 views
4

我正在尋找在C++中的對象序列化/反序列化庫的建議?哪一個是最先進和開源的?需要在C++中的對象序列化庫的建議

它可以處理

  • 任何類的用戶定義的?
  • 對象層次結構(父類和子類)?
  • 一棵樹的對象? A類具有B類屬性,其屬性爲C類?
  • STL容器? A類具有B類矢量?
  • 循環的對象?類A有一個指向B的指針,它有一個指向A的指針?

我找到boost序列化庫。我不確定它的侷限性是什麼http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/tutorial.html

回答

3

這真的取決於你在找什麼。如果您正在圖書館尋找超快的速度和快速開發,Boost真棒。如果你正在尋找超快的速度,多一點的定製能力和跨庫兼容性,那麼Qt是一個很好的解決方案(並不是說Boost也不能這麼做)。如果您正在尋找瘋狂的互操作性,那麼尋找一種基於文本的序列化系統,如JSON(jsoncpp),YAML(yamlcpp)或XML(方式太多),每個系統都有大約80億個獨立庫。

3

Protocol buffers是Google開發和使用的用於跨語言對象序列化的庫。它的概念可能與你所描述的有所不同,但值得一看。

1

Linderdaum引擎核心(iObject,iStaticClass和clLinker對象)爲C++提供自定義RTTI。

序列化背後的想法很簡單:我們使用自動化源代碼後處理器(LSDC)生成所有保存/加載代碼以及所有元類和屬性的註冊。 任何對象都可以序列化爲基於抽象樹的標記語言腳本。支持XML和自定義類JSON(我們稱之爲XLML)腳本。

實現細節在這個答案描述:https://stackoverflow.com/a/10332336/1182653

  1. 從IObject提取派生的任何類支持
  2. 對象層次結構支持
  3. 對象的 「樹」 的支持
  4. 的std ::向量樣容器(支持push_back/size語義)被支持
  5. 那麼,這些屬性是明確定義的,並且可以執行「指針修正」在定製的iObject :: EndLoad()方法中編輯(在用戶類中重新定義)