提升序列化省略包装器的版本

Posted

技术标签:

【中文标题】提升序列化省略包装器的版本【英文标题】:boost serialization omit version for a wrapper 【发布时间】:2011-12-07 10:48:18 【问题描述】:

我如何告诉 boost 对于特定结构它不应该写入/读取类“版本”标识符?

我正在编写一些包装类,用于以较小的方式序列化某些类型(如可变长度整数)。如果包装器编写了一个类版本,则大小减小的全部意义就丢失了(在大多数情况下最终会变大)。

例如,给定integer a,我将替换此代码:

ar & a;

用这个:

ar & wrapper(a);

我看到了 is_wrapper 特征,但我真的找不到任何文档说明它的作用,或者它是否有帮助。

【问题讨论】:

【参考方案1】:

添加

BOOST_CLASS_IMPLEMENTATION(wrapper, boost::serialization::object_serializable)

这是documented way。

【讨论】:

你不会碰巧知道底层结构代码,对吗?我有一个模板类型,因此宏不起作用。 @edA-qamort-ora-y:如果是其他任何库,我会建议您将宏挖出来,但在 boost... brrr 只是想想就让人不寒而栗。 是的,我只是在查看宏之后才问...虽然我认为我有一个语法,它似乎从 wrapper_traits 派生自动省略了版本,所以我不知道是否我是对的。

以上是关于提升序列化省略包装器的版本的主要内容,如果未能解决你的问题,请参考以下文章

在使用Serde反序列化对象时,有没有办法省略包装器/根对象?

Kotlin Gson反序列化

提升序列化:归档“不支持的版本”异常

在堆栈上分配不完整的类型

提升序列化和命名空间

DRF序列化器的使用