Boost序列化版本信息

Posted

技术标签:

【中文标题】Boost序列化版本信息【英文标题】:Boost serialization version information 【发布时间】: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。 【参考方案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)

按此顺序。

【讨论】:

以上是关于Boost序列化版本信息的主要内容,如果未能解决你的问题,请参考以下文章

Boost 序列化版本控制如何工作?

boost text 序列化版本(15 vs 18)

我可以告诉 Boost.MPI 哪个类版本与 Boost.Serialization 一起使用吗?

序列化具有嵌入类的boost类,但仅对包装器中的信息进行序列化

boost::serialization v1.59 和 v1.60 之间的归档版本

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本新增序列管理