c++ - 是否可以在 boost 中向结构添加额外的数据
问题描述
你好,如果我有这样的课
class Doors
{
private:
friend class boost::serialization::access;
template <class Ar>
void serialize(Ar &ar, unsigned)
{
ar &username &password;
}
public:
string username;
string password
};
然后我序列化该类并将其添加到 MySql 然后我决定编辑该结构并像这样向它添加更多数据
class Doors
{
private:
friend class boost::serialization::access;
template <class Ar>
void serialize(Ar &ar, unsigned)
{
ar &username &password &email ☎
}
public:
string username;
string password;
string email;
string phone;
};
现在我在编辑结构之前已经在 MySql 中有一些序列化数据,如果我反序列化它会显示 boost 错误,因为我已经修改了结构现在我的问题是
是否可以采用旧课程然后将新数据添加到其中?因为我不想删除旧的。
解决方案
serialize()
请注意您没有使用的第二个参数,它是类版本。
您可以调整课程版本,并根据版本选择读取附加字段。
class Doors
{
private:
friend class boost::serialization::access;
template <class Ar>
void serialize(Ar& ar, unsigned version)
{
ar &username &password;
if (version > 0) {
ar &email ☎
}
}
public:
string username;
string password;
string email;
string phone;
};
BOOST_CLASS_VERSION(Doors, 1);
默认版本为 0。因此,未定义类版本的旧格式将具有版本 0。
推荐阅读
- javascript - Javascript:如何在一个查找数组中匹配多个变量?
- javascript - 如何使用 Star Wars SWAPI API 从服务器搜索端点
- css - 文本下的边框和边框中的css文本
- javascript - 检查是否有任何对象为特定字段提供了值
- swift - 实例成员存储不能用于 StorageReference 类型
- java - SpringBoot,控制器通过ResponseBodyAdvice返回数据发生错误(class can't cast to string)
- unity3d - 统一:转换孩子的位置并将父母留在原处
- c# - VSTS 多个私有 NuGet 源
- spring-cloud-dataflow - Spring Cloud 数据流仪表板
- ruby-on-rails - 为什么 ActiveRecord 关联 CollectionProxy 数据作为文本输出到屏幕?