如何加载序列化的boost :: variant?

时间:2011-07-20 11:53:54

标签: c++ serialization boost deserialization boost-variant

我无法使用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有很多代码可以让它变得便携,所以也许有一种不那么便携但更简单的方法呢?

1 个答案:

答案 0 :(得分:1)

如果要从boost / serialization / variant.hpp的副本中删除序列化内容(除了Archive模板参数) - 即抛出自己的异常类型并更改例如

ar >> BOOST_SERIALIZATION_NVP(which);
// to:
ar >> which;

然后看起来你应该能够在保存/加载函数中用std :: ostream或std :: istream替换Archive。

没试过,但一眼就看起来应该可以了。

我想这确实取决于你实际使用什么来序列化数据,如果不使用boots :: serialization?