我正在开发一个热升级功能,需要打包一个结构数组,以便为新版本找到它们。我真的想避免为每个可能的版本转换添加转换函数。这合理吗?
对结构的最可能的更改是将来要将更多字段添加到结构中,如果发生这种情况,则可以使用新字段的默认值。我还将很快面临将结构数组保存到配置文件中的任务,因此可以应用于热升级和配置保存的答案的额外功劳。
我不必担心热更新机制我只是给它一个指针和一个大小,它做了神奇的魔术:)
答案 0 :(得分:10)
对结构的最可能的更改是将来要将更多字段添加到结构中,如果发生这种情况,则可以使用新字段的默认值。
从版本1开始,始终在每个结构的开头包含sizeof(myStruct)
作为字段。然后,当您需要添加新字段时,始终在每个结构的末尾执行此操作,而不是在中间。现在,当接收(或从文件读取)时,首先只读取size字段,以便知道它之后会有多少字节。如果接收器/阅读器确定的大小小于sizeof(myStruct)
,那么您就知道缺少某些内容,并且需要默认值。
答案 1 :(得分:7)
我建议使用类似Google的protocol buffers,它会自动处理版本控制。如果您在邮件中添加新字段,则很容易处理。