【问题标题】:Can boost::serialization::access dynamically change versions at run time/programatically?boost::serialization::access 可以在运行时/以编程方式动态更改版本吗?
【发布时间】:2012-05-16 14:32:22
【问题描述】:

我之前问过this question 如何使用boost::serialization::access 进行“版本化”序列化

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

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

然而,宏

BOOST_CLASS_VERSION(ClassName, ver)

似乎不允许这种行为。

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

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

更多解释一下我们需要做什么:

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

【问题讨论】:

  • 您看过example(由您引用的问题提供)吗?它给出了 bus_route 类的示例,在加载新字段之前检查版本。 demo 说明了同样的事情
  • @Hasturkun 是的,我有,但不允许在同一执行中使用不同的版本。

标签: c++ serialization boost


【解决方案1】:

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

【讨论】:

  • 我不明白如何在执行期间更改该参数。我只看到如何在编译时静态设置它。有没有例子说明如何做到这一点?
  • 当它从旧数据中读取时,传递给函数的版本号将是存储在文件中的版本号,而不是静态版本号。
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 2023-04-02
  • 2020-09-03
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 2023-04-01
  • 2012-01-13
相关资源
最近更新 更多