Повысить сериализацию: исключение архива "неподдерживаемая версия" - PullRequest
5 голосов
/ 16 мая 2011

У меня есть исключение "неподдерживаемая версия" , когда я пытаюсь десериализовать через текстовый архив некоторые данные, ранее сериализованные с помощью более высокой версии Boost (1.46 для сериализации и 1.38 для десериализации) ...Есть ли способ понизить (в коде) сериализации?

Что-то вроде "set_library_version"?

1 Ответ

5 голосов
/ 16 мая 2011

См. Ошибка чтения двоичного архива, созданного старой версией Boost сообщение почтового архива об ошибке сериализации.

Там написано, что код ниже выполняет свою работу:

void load_override(version_type & t, int version){

    library_version_type lvt = this->get_library_version();
    if (boost::archive::library_version_type(7) < lvt){
        this->detail_common_iarchive::load_override(t, version);
    }
    else
        if (boost::archive::library_version_type(6) < lvt){
            uint_least16_t x = 0;
            * this->This() >> x;
            t = boost::archive::version_type(x);
        }
        else
            if (boost::archive::library_version_type(3) == lvt ||
                boost::archive::library_version_type(5) == lvt){

                #pragma message("CTMS fix for serialization bug (lack of backwards compatibility) introduced by Boost 1.45.")
                // Up to 255 versions
                unsigned char x = 0;
                * this->This() >> x;
                t = version_type(x);
            }
            else{
                unsigned int x = 0;
                * this->This() >> x;
                t = boost::archive::version_type(x);
            }
}
...