|
yaLanTingLibs
|
兼容字段类型 更多...
#include <struct_pack_doc.hpp>


Public 成员函数 | |
| constexpr | compatible (const compatible &other)=default |
| constexpr | compatible (compatible &&other)=default |
| constexpr | compatible (std::optional< T > &&other) |
| constexpr | compatible (const std::optional< T > &other) |
| constexpr compatible & | operator= (const compatible &other)=default |
| constexpr compatible & | operator= (compatible &&other)=default |
静态 Public 属性 | |
| static constexpr uint64_t | version_number = version |
友元 | |
| bool | operator== (const compatible< T, version > &self, const compatible< T, version > &other) |
兼容字段类型
| T | 兼容字段的类型 |
| version | 兼容字段的版本号 |
这个类使用上类似于std::optional<T>,但其语义是添加一个能够保持向前兼容的字段。
例如:
struct_pack::compatible可以为空值,从而保证向前和向后的兼容性。 例如,序列化person_v2,然后将其按照person_v1来反序列化,多余的字段在反序列化时将会被直接忽略。 反过来说,序列化person_v1,再将其按照person_v2来反序列化,则解析出的person_v2中的compatibale字段均为空值。
compatible字段的版本号可以省略,默认版本号为0。
升级接口时应注意保持版本号递增 原则:
1.新增加的compatible字段的版本号,应该大于上一次增加的compatible字段的版本号。
2.不得移除原来的任何一个compatible字段(移除普通字段也会出错,但这种错误是可以被类型校验检查出来的)
假如违反这一原则,那么可能会引发未定义行为。 例如: