【问题标题】:boost Serialisation on a variant containing boost::blankboost 对包含 boost::blank 的变体进行序列化
【发布时间】:2020-12-13 20:54:49
【问题描述】:

我有一个 boost::variant,其中一个字段有 boost::blank 字段,在同一字段上使用 boost::serialise 会引发错误 error: no member named 'serialize' in 'boost: :blank'.

有没有办法通过在某处为 boost::blank 添加单独的函数来避免这种情况?

【问题讨论】:

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


    【解决方案1】:

    是的,只需使用非成员序列化,也就是非侵入式序列化:

    namespace boost { namespace serialization {
        template <typename Ar> void serialize(Ar&, boost::blank&, unsigned) {}
    } }
    

    您还可以在命名空间boost 中添加重载,因为 ADL 会在那里找到它

    现场演示

    Live On Coliru

    #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&, boost::blank&, 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      相关资源
      最近更新 更多