在使用Boost Serialization进行序列化时,有没有办法删除序列化数据开头的额外6个字节?我只是想使用序列化机制,我不想要任何版本,对象跟踪或任何其他头信息。
答案 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)
按此顺序。