Я пишу c ++ 11 в Ubuntu 16.04.3. Я установил буст 1.58 с помощью команды: apt install libboost-all-dev
.
Теперь я пишу о буст-сериализации, вот код:
#include <iostream>
#include <fstream>
#include <boost/serialization/variant.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
class Test {
public:
Test() = default;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & a & b & ch;
}
int a, b;
char ch;
};
class Test2
{
public:
Test2() = default;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & a & b;
}
double a, b;
};
int main()
{
Test t;
const char *filename = "ser";
// serialize
std::ofstream ofile(filename);
boost::archive::text_oarchive oTextArchive(ofile);
oTextArchive << t;
ofile.close();
// deserialize
std::ifstream ifile(filename);
boost::archive::text_iarchive iTextArchive(ifile);
Test t2;
boost::variant<Test, Test2> v;
//iTextArchive >> t2;
iTextArchive >> v;
ifile.close();
return 0;
}
Проблема возникает здесь:
//iTextArchive >> t2;
iTextArchive >> v;
Если я десериализую iTextArchive
до t2
, все будет в порядке. Но если я десериализую его до v
, код все равно будет компилироваться с помощью команды g++ -std=c++11 test.cpp -lboost_serialization
, но когда я выполнил его, я получил ошибку:
terminate called after throwing an instance of 'boost::archive::archive_exception'
what(): unsupported version
Aborted (core dumped)
Я нашел что-то в Google, например, 'boost :: archive :: archive_exception' what (): неподдерживаемая версия , но это не работает.