提升序列化版本信息

时间:2013-12-12 16:34:06

标签: c++ boost boost-serialization

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

如果要省略所有类的版本信息(导致更节省空间但不太健壮的存档),可以将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);
};
}
}

答案 2 :(得分:0)

同时使用:

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

按此顺序。