【问题标题】:How to retrieve multiple objects values in boost serialization如何在提升序列化中检索多个对象值
【发布时间】:2017-05-01 15:37:43
【问题描述】:

在下面的代码 sn-p 中,我将 2 个对象存储在“文件名”文件中,但惊讶地发现在反序列化过程中第一个对象值检索 2 次。除此之外,我想在同一个文件中存储和检索多个类对象。目前我能够将对象存储在文件中,但无法检索。

任何人都可以对此有所了解吗?

#include <fstream>
#include <iostream>
// include headers that implement a archive in simple text format
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
using namespace std;
/////////////////////////////////////////////////////////////
// object_model
//
// illustrates serialization for a simple type
//
class object_model
{
private:
    friend class boost::serialization::access;
    // When the class Archive corresponds to an output archive, the
    // & operator is defined similar to <<.  Likewise, when the class Archive
    // is a type of input archive the & operator is defined similar to >>.
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & classval;
        ar & property;

    }
    string classval;
    int property;

public:
    object_model(){};
    object_model(string d, int p) :
        classval(d), property(p)
    {}

    string getClassval()
    {
      return classval;
    }

     int getproperty()
     {
         return property;
     }
};

int main() {
    // create and open a character archive for output
    std::ofstream ofs("filename");

    // create class instance
     object_model g("lidar",10);
   {
    // save data to archive

        boost::archive::text_oarchive oa(ofs);
        // write class instance to archive
        oa << g;

    }


   object_model g1("lidar1",20);
      {
       // save data to archive

           boost::archive::text_oarchive oa(ofs);
           // write class instance to archive
           oa << g1;

       }


    // ... some time later restore the class instance to its orginal state
    object_model newg;
    {
        // create and open an archive for input
        std::ifstream ifs("filename");
        boost::archive::text_iarchive ia(ifs);
        // read class state from archive
        ia >> newg;
        cout<<newg.getClassval();
        cout<<newg.getproperty();
        cout<<"done"<<endl;
     }
        // archive and stream closed when destructors are called

    object_model newg1;
        {
            // create and open an archive for input
            std::ifstream ifs("filename");
            boost::archive::text_iarchive ia(ifs);
            // read class state from archive
            ia >> newg1;
            cout<<newg1.getClassval();
            cout<<newg1.getproperty();
            cout<<"done"<<endl;
         }



    return 0;
}

【问题讨论】:

    标签: c++ serialization boost


    【解决方案1】:

    在将数据保存到存档对象时,您需要完全重定向这两个对象。它对我来说非常好。

    object_model g("激光雷达",10); object_model g1("lidar1",20);

    { // 保存数据到存档

        boost::archive::text_oarchive oa(ofs);
        // write class instance to archive
        oa << g<<g1;
    
    }
    

    // ... 一段时间后将类实例恢复到其原始状态

      object_model newg;
        object_model newg1;
    
        {
            // create and open an archive for input
            std::ifstream ifs("filename");
            boost::archive::text_iarchive ia(ifs);
            // read class state from archive
            ia >> newg>>newg1;
            cout<<newg.getClassval();
            cout<<newg.getproperty();
            cout<<newg1.getClassval();
            cout<<newg1.getproperty();
            cout<<"done"<<endl;
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多