问题描述
我有一个boost :: variant,其中一个字段具有boost :: blank字段,在同一字段上使用boost :: serialise会引发错误,提示错误:'boost中没有名为'serialize'的成员: :空白” 。
是否有办法通过在某个地方添加单独的boost :: blank函数来避免这种情况?
解决方法
是的,只需使用非成员序列化,也就是非侵入式序列化:
namespace boost { namespace serialization {
template <typename Ar> void serialize(Ar&,boost::blank&,unsigned) {}
} }
您还可以将重载添加到命名空间boost
中,因为ADL会在其中找到重载
实时演示
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/variant.hpp>
#include <iostream>
using V = boost::variant<boost::blank,int>;
namespace boost { namespace serialization {
template <typename Ar> void serialize(Ar&,unsigned) {}
} }
int main() {
V a{42},b;
boost::archive::text_oarchive oa(std::cout);
oa << a << b;
}
例如打印
22 serialization::archive 17 1 0
0 1 42
1 0 0 0