使用Boost序列化保存和检索多个对象

Saving and retrieving multiple objects using boost serialization

本文关键字:对象 检索 Boost 序列化 保存 使用      更新时间:2023-10-16

如何使用boost序列化保存和获取多个对象(对象数量变化)?例如,我有课堂联系人,然后输入联系人并将其保存到文件。另一次我输入另一个联系人,也应保存在文件中。

我认为保存功能应该是这样:

void save_contact(const Contact &s, const char * filename){
    std::ofstream ofs(filename, std::ios::app);
    boost::archive::text_oarchive oa(ofs);
    oa << s;
    ofs << "n";
}

,要检索联系人,我应该跟踪联系人号码,对吗?要检索单个联系人,我使用以下代码:

void retrieve_contact(Contact &s, const char * filename)
{
    std::ifstream ifs(filename);
    boost::archive::text_iarchive ia(ifs);
    ia >> s;
}

这是联系类中的序列化功能看起来像:

template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & m_CompanyName;
        ar & m_FirstName;
        ar & m_LastName;
        ar & m_PhoneNumbers;
    }

(m_companyname,m_firstname和m_lastname是std :: string,m_phoneNumbers是std :: vector)那么,是否可以以某种方式检索联系而不跟踪联系人数量?还是您可以建议我另一种保存和检索联系人的方法,并保存在不同的时间?另外,如何编辑保存的文件以修改联系人?

是的,对标准容器使用预定义的序列化。因此,例如

#include <boost/serialization/vector.hpp>

,然后

void retrieve_contact(std::vector<Contact>& s, const char * filename)
{
    std::ifstream ifs(filename);
    boost::archive::text_iarchive ia(ifs);
    ia >> s;
}