C++ 如何使用boost::serialization序列化std::vector? 类工作流{ 私人: 好友类boost::serialization::access; 模板 无效序列化(存档和ar,常量未签名整数版本) { ar&tasks; ar&ID; } 向量任务; int-ID;
如何使用boost库序列化成员“任务”?对不起, 我解决了使用C++ 如何使用boost::serialization序列化std::vector? 类工作流{ 私人: 好友类boost::serialization::access; 模板 无效序列化(存档和ar,常量未签名整数版本) { ar&tasks; ar&ID; } 向量任务; int-ID;,c++,boost,vector,serialization,C++,Boost,Vector,Serialization,如何使用boost库序列化成员“任务”?对不起, 我解决了使用 class workflow { private: friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & tasks; ar & ID; } vector<taskDes
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;
tnx
再见#包括
另请阅读。仅为这个问题添加一个通用示例。假设我们要序列化一个没有任何类或任何内容的向量。这是您可以做到的:
#include <boost/serialization/vector.hpp>
如果有人需要编写显式的“序列化”方法,而不包含任何boost头(用于抽象目的等):
std::vector dataVec;
int size;//您已经显式地添加了向量大小
模板
无效序列化(存档和ar,常量未签名整数版本)
{
if(存档::正在加载::值){
应收账款&规模;
对于(int i=0;i
此代码不起作用吗?您输入的看起来正确。您得到了什么错误?链接文档中没有出现文本“vector”。您能告诉我它是如何工作的吗?我也一直在尝试查找
#include <boost/serialization/vector.hpp>
#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;
}
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
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];
}
}
}