boost :: serialization с вариантом: неподдерживаемая версия - PullRequest
0 голосов
/ 21 апреля 2019

Я пишу 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 (): неподдерживаемая версия , но это не работает.

...