首页 > 解决方案 > 是否可以在 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 &phone;
    }

public:
    string username;
    string password;
    string email;
    string phone;
};

现在我在编辑结构之前已经在 MySql 中有一些序列化数据,如果我反序列化它会显示 boost 错误,因为我已经修改了结构现在我的问题是

是否可以采用旧课程然后将新数据添加到其中?因为我不想删除旧的。

标签: c++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 &phone;
        }
    }

public:
    string username;
    string password;
    string email;
    string phone;
};

BOOST_CLASS_VERSION(Doors, 1);

默认版本为 0。因此,未定义类版本的旧格式将具有版本 0。


推荐阅读