7 Stimmen

Boost-Serialisierung: Ausnahme "nicht unterstützte Version" im Archiv

Ich habe die Ausnahme "nicht unterstützte Version" wenn ich versuche, über ein Textarchiv einige Daten zu deserialisieren, die zuvor mit einer höheren Version von Boost serialisiert wurden (1.46 zum Serialisieren und 1.38 zum Deserialisieren) ... gibt es eine Möglichkeit, (im Code) die Serialisierung herunterzustufen?

Etwas wie "set_library_version"?

6voto

O.C. Punkte 6621

Siehe die Fehler beim Lesen eines Binärarchivs, das mit einer alten Boost-Version erstellt wurde Mail-Archiv-Beitrag über den Serialisierungsfehler.

Es heißt, dass der folgende Code die Aufgabe erfüllt:

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);
            }
}

2voto

denn Punkte 330

Verwendung von text_archive ... Ich hatte kürzlich auch ein Problem mit diesem Thema. Ich habe kürzlich Boost von 1.67 auf 1.72 unter Windows aktualisiert und einige Daten unter Windows generiert. Als ich die Daten in meiner Linux-Umgebung ausführte, die noch auf Boost 1.67 läuft, gab es folgende Probleme nicht unterstützt .

Die Kopfzeile für 1.67 sah wie folgt aus

22 serialization::archive 16

und 1,72 sah aus wie

22 serialization::archive 17

Ich änderte 17 in 16 und war damit für meinen Anwendungsfall zufrieden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X