我在我的應用程序中使用boost::variant
和boost::serialize
。序列化模塊內置支持序列化變體,因此:強大的boost :: variant序列化
boost::variant<int,double> u(3.14);
// Do something with u;
// Serialize
oa << u;
工作。但是,我的問題是序列化不健壯。根據我的應用程序的編譯方式,變體的元素可能會發生變化。目前,序列化模塊似乎只是嵌入'active'變體類型的索引;如果變體變爲boost::variant<double,string>
這是一個問題。
任何人都可以提出改進方法,以便序列化/非序列化工作,以便序列化的類型是boost::variant
的模板參數。 (因此,在上述情況下,boost::variant<int,double> u(3.14)
可能會被非序列化爲boost::variant<double,std::string>
。我知道這可能會要求我提供其他信息,例如類型的字符串化形式
你爲什麼要改變變體的元素?您通常不希望您的文件格式規格發生變化。 – Mranz
但是,我通常會同意程序本身是一個數值模擬。模擬課程的模板很多,有幾百萬種可能的組合。顯然,我不能將它們全部實例化爲可執行文件。鑑於我的用戶基礎都是自編譯的,使用變體來保存支持實例是合理的。 –