考慮下面的例子:升壓矢量序列追加問題
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/serialization.hpp>
#include <iostream>
#include <sstream>
using namespace boost;
using namespace std;
int main()
{
std::ostringstream oss;
boost::archive::text_oarchive oa(oss);
vector<int> src1 = {1}, src2 = {2};
vector<int> dst;
oa << src1;
oa << src2;
string serialized = oss.str();
std::istringstream iss(serialized);
boost::archive::text_iarchive ia(iss);
ia >> dst;
cout << "size=" << dst.size() << endl;
ia >> dst;
cout << "size=" << dst.size() << endl;
}
輸出:
尺寸= 1
大小= 1把
一切都很好。然而,如果改變矢量<INT>到矢量<串>:
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/serialization.hpp>
#include <iostream>
#include <sstream>
using namespace boost;
using namespace std;
int main()
{
std::ostringstream oss;
boost::archive::text_oarchive oa(oss);
vector<string> src1 = {"hi"}, src2 = {"hi"};
vector<string> dst;
oa << src1;
oa << src2;
string serialized = oss.str();
std::istringstream iss(serialized);
boost::archive::text_iarchive ia(iss);
ia >> dst;
cout << "size=" << dst.size() << endl;
ia >> dst;
cout << "size=" << dst.size() << endl;
}
輸出:
尺寸= 1
大小= 2
結果被附加到dst的,沒有被分配。爲什麼?如何「分配語義」可以實現?
編譯器:gcc版本5.2.1 20151010(Ubuntu的5.2.1-22ubuntu2)
編譯:克++ -std = C++ 11 test2.cc -lboost_serialization
在MSVC2013上按照您的預期工作。 – marom
您使用的是哪個版本的BOOST? – marom
boost版本1.58 – Alex