c++ - boost::serialization::access 可以在运行时/以编程方式动态更改版本吗?

标签 c++ serialization boost

我之前问过this question关于如何使用 boost::serialization::access

进行“版本化”序列化

我已经能够做一些我想做的事,但似乎有很大的局限性。

具体来说,我希望能够在运行时更改版本并在代码中动态更改序列化版本。

但是,宏

BOOST_CLASS_VERSION(ClassName, ver)

似乎不允许这种行为。

我想我可以创建不同的类并在需要时分别使用它们,但我不想这样做,因为这需要我们进行大量代码更改。

有没有办法以编程方式更改类以在同一执行期间使用不同版本?

关于我们需要做什么的更多解释:

我尝试使用的用例是程序读取旧版本(首次运行/升级时),然后使用新版本编写,然后还能够读取该新版本。

最佳答案

该设计似乎有意让您不要动态更改版本。但是,可以通过version 参数为您的serializesaveload 函数支持读取旧数据.也就是说,在您的加载函数中,您可以检查版本 并查看是否必须以不同方式加载特定部分。所以加载旧数据是可能的,但它必须在一组序列化函数中完成。

关于c++ - boost::serialization::access 可以在运行时/以编程方式动态更改版本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10620783/

相关文章:

c++ - 权限被拒绝是什么意思

Ruby PStore 与 Postgres

c# - 为什么我需要在这个序列化片段中刷新并将流位置设置为 0?

c++ - boost::tuple 和通用结构的不同模板特化

c++ - 别名 boost::variant 或 std::variant 不可编译

c++ - 如果包含 map 的静态库与可执行和动态库链接,静态 map (变量)会被多次释放吗?

c++ - 这是一种击败省略以保持 dtor 副作用的方法吗?

c++ - 充满垃圾记录的 map

json - @JsonTypeInfo 可以与集合一起使用吗?

c++ - 如何为 boost fusion 图添加 boost 存档序列化支持?