我无法使用boost::serialization
因为它具有库依赖性,所以我试图想办法自己做。如果这意味着从boost::serialization
复制。
在阅读this answer to a similar question之后,我查看了boost/serialization/variant.hpp并找到了save()
功能,这对我来说是直截了当的。
但是load()
函数看起来更复杂:有一个涉及load()
和variant_impl<types>::load()
的递归以及一个递减的which
参数。
显然,代码会迭代每种类型的变体,以便将int which
转换为类型。
剩下的就是我。
我知道boost有很多代码可以让它变得便携,所以也许有一种不那么便携但更简单的方法呢?
答案 0 :(得分:1)
如果要从boost / serialization / variant.hpp的副本中删除序列化内容(除了Archive模板参数) - 即抛出自己的异常类型并更改例如
ar >> BOOST_SERIALIZATION_NVP(which);
// to:
ar >> which;
然后看起来你应该能够在保存/加载函数中用std :: ostream或std :: istream替换Archive。
没试过,但一眼就看起来应该可以了。
我想这确实取决于你实际使用什么来序列化数据,如果不使用boots :: serialization?