是否可以向 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 &phone;
    }

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 &phone;
        }
    }

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

BOOST_CLASS_VERSION(Doors, 1);

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