是否可以向 boost 中的结构添加额外的数据
is it possible to add extra data to a struct in boost
你好,如果我有这样的 class
class Doors
{
private:
friend class boost::serialization::access;
template <class Ar>
void serialize(Ar &ar, unsigned)
{
ar &username &password;
}
public:
string username;
string password
};
然后我序列化 class 并将其添加到 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 中有一些序列化数据,如果我反序列化它,它将显示提升错误,因为我已经修改了结构,现在我的问题是
是否可以使用旧的 class 然后向其中添加新数据?
因为我不想删除旧的。
请注意您没有使用的 serialize()
的第二个参数,它是 class 版本。
您可以修改 class 版本并根据版本选择读取其他字段。
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。因此,您未定义 class 版本的旧格式将具有版本 0。
你好,如果我有这样的 class
class Doors
{
private:
friend class boost::serialization::access;
template <class Ar>
void serialize(Ar &ar, unsigned)
{
ar &username &password;
}
public:
string username;
string password
};
然后我序列化 class 并将其添加到 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 中有一些序列化数据,如果我反序列化它,它将显示提升错误,因为我已经修改了结构,现在我的问题是
是否可以使用旧的 class 然后向其中添加新数据? 因为我不想删除旧的。
请注意您没有使用的 serialize()
的第二个参数,它是 class 版本。
您可以修改 class 版本并根据版本选择读取其他字段。
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。因此,您未定义 class 版本的旧格式将具有版本 0。