【问题标题】:Boost serialization version informationBoost序列化版本信息
【发布时间】:2013-12-12 16:34:06
【问题描述】:

在使用 Boost Serialization 进行序列化时,有什么方法可以删除放在序列化数据开头的额外 6 个字节?我只想使用序列化机制,我不想要任何版本、对象跟踪或任何其他头信息。

【问题讨论】:

  • 我相信构造函数的 no_header 标志可能会做你想做的事。
  • 已经尝试过no_header 标志,它会删除一个文本标题,但不会删除额外的 6 个字节。
  • 也许您可以派生自己的存档类并将 void save(const version_type & t) 和 void load(version_type & t) 覆盖为无操作?此外还有其他类型的类版本,boost::serialization::item_version_type。

标签: c++ boost boost-serialization


【解决方案1】:

我使用implementation level 解决了我的问题:

BOOST_CLASS_IMPLEMENTATION(MyClass, boost::serialization::object_serializable);

通过这样做,序列化将不包括原始序列化数据前面的版本。

【讨论】:

    【解决方案2】:

    如果您想省略所有类的版本信息(导致空间效率更高,但存档的健壮性较差),您可以将 BOOST_CLASS_IMPLEMENTATION 宏与默认行为结合起来:

    namespace boost {
    namespace serialization {
    template <class T>
    struct implementation_level_impl< const T >
    {
        template<class U>
        struct traits_class_level {
            typedef BOOST_DEDUCED_TYPENAME U::level type;
        };
    
        typedef mpl::integral_c_tag tag;
    
        typedef
            BOOST_DEDUCED_TYPENAME mpl::eval_if<
                is_base_and_derived<boost::serialization::basic_traits, T>,
                traits_class_level< T >,
            //else
            BOOST_DEDUCED_TYPENAME mpl::eval_if<
                is_fundamental< T >,
                mpl::int_<primitive_type>,
            //else
            BOOST_DEDUCED_TYPENAME mpl::eval_if<
                mpl::or_<is_class< T >, is_array< T> >,
                mpl::int_<object_serializable>,
            //else
            BOOST_DEDUCED_TYPENAME mpl::eval_if<
                is_enum< T >,
                    mpl::int_<primitive_type>,
            //else
                mpl::int_<not_serializable>
            >
            >
            >
            >::type type;
        BOOST_STATIC_CONSTANT(int, value = type::value);
    };
    }
    }
    

    【讨论】:

      【解决方案3】:

      同时使用:

      BOOST_CLASS_IMPLEMENTATION(, boost::serialization::object_serializable) BOOST_CLASS_TRACKING(, boost::serialization::track_never)

      按此顺序。

      【讨论】:

        猜你喜欢
        • 2020-08-23
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 2017-06-22
        • 1970-01-01
        • 2021-12-14
        • 2011-08-26
        • 1970-01-01
        相关资源
        最近更新 更多