如何使用 boost::serialization 序列化 std::vector?
Posted
技术标签:
【中文标题】如何使用 boost::serialization 序列化 std::vector?【英文标题】:How can I serialize an std::vector with boost::serialization? 【发布时间】:2011-05-15 15:24:03 【问题描述】: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;
如何使用 boost 库序列化成员“任务”?
【问题讨论】:
这段代码不起作用吗?您输入的内容看起来正确。你遇到了什么错误? 【参考方案1】:#include <boost/serialization/vector.hpp>
另请阅读tutorial。
【讨论】:
链接文档中没有出现文本“vector”。【参考方案2】:只是为这个问题添加一个通用示例。假设我们想要序列化一个没有任何类或任何东西的向量。你可以这样做:
#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;
由于我使用 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
【讨论】:
【参考方案3】:如果有人需要编写显式的“序列化”方法没有任何包含 boost 标头(用于抽象目的等):
std::vector<Data> dataVec;
int size; //you have explicitly add vector size
template <class Archive>
void serialize(Archive &ar, const unsigned int version)
if(Archive::is_loading::value)
ar & size;
for(int i = 0; i < size; i++)
Data dat;
ar & dat;
dataVec.push_back(dat);
else
size = dataVec.size();
ar & size;
for(int i = 0; i < size; i++)
ar & dataVec[i];
【讨论】:
【参考方案4】:对不起, 我用
解决了ar & BOOST_SERIALIZATION_NVP(tasks);
tnx 再见
【讨论】:
你能告诉我它是如何工作的吗?我也一直想知道以上是关于如何使用 boost::serialization 序列化 std::vector?的主要内容,如果未能解决你的问题,请参考以下文章
使用 boost::serialization 时如何刷新文件缓冲区?
如何为 boost::serialization 指定一个 nvp 包装器?
使用 boost::serialization 保存数据时出现 Seg 错误
如何抑制 boost serialization::archive 中的额外信息?