如何使用boost :: serialization序列化std :: vector?

Giu*_*ppe 17 c++ serialization boost vector

class workflow {

private:
friend class boost::serialization::access;

template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
  ar & tasks;
  ar & ID;
}

 vector<taskDescriptor> tasks;
 int ID;
Run Code Online (Sandbox Code Playgroud)

如何使用boost库序列化成员"任务"?

Aby*_*byx 28

#include <boost/serialization/vector.hpp>
Run Code Online (Sandbox Code Playgroud)

另请阅读教程.

  • 链接文档中不会出现文本"vector". (10认同)

Mar*_*cin 12

只是为这个问题添加一个通用的例子.让我们假设我们想要序列化一个没有任何类或任何东西的向量.这是你如何做到的:

#include <iostream>
#include <fstream>

// include input and output archivers
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

// include this header to serialize vectors
#include <boost/serialization/vector.hpp>

using namespace std;



int main()
{

  std::vector<double> v = {1,2,3.4, 5.6};

  // serialize vector
  {
    std::ofstream ofs("/tmp/copy.ser");
    boost::archive::text_oarchive oa(ofs);
    oa & v;
  }

   std::vector<double> v2;

   // load serialized vector into vector 2
   {
     std::ifstream ifs("/tmp/copy.ser");
     boost::archive::text_iarchive ia(ifs);
     ia & v2;
   }

   // printout v2 values
   for (auto &d: v2 ) {
      std::cout << d << endl;
   }


  return 0;
}
Run Code Online (Sandbox Code Playgroud)

由于我使用Qt,这是我的qmake pro文件内容,显示了如何链接和包含boost文件:

TEMPLATE = app
CONFIG -= console
CONFIG += c++14
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp


include(deployment.pri)
qtcAddDeployment()

INCLUDEPATH += /home/m/Downloads/boost_1_57_0


unix:!macx: LIBS += -L/home/m/Downloads/boost_1_57_0/stage/lib -lboost_system
unix:!macx: LIBS += -L/home/m/Downloads/boost_1_57_0/stage/lib -lboost_serialization
Run Code Online (Sandbox Code Playgroud)


Giu*_*ppe 2

抱歉,我解决了使用

ar & BOOST_SERIALIZATION_NVP(tasks);
Run Code Online (Sandbox Code Playgroud)

再见