TLDR: Ich möchte eine Klassenserialisierung von der Implementierungsebene object_class_info
zu object_serializable
übergehen, Kompatibilität mit alten Datendateien behalten, während immer Dateien im neuen Format schreiben.Boost-Serialisierung: Übergang von versionierter Klasse zu object_serializable
Begründung: Als ich begann, die Boost Serialization-Bibliothek zu verwenden, erkannte ich nicht, dass es bereits mit einer Kopfzeile (complex.hpp) zur Serialisierung std::complex<double>
kam. Stattdessen schrieb ich meine eigene, freistehende Serialisierungsfunktion:
namespace boost { namespace serialization {
template<class Archive, typename T>
void serialize(Archive& ar, std::complex<T>& comp, const unsigned int version) {
ar & reinterpret_cast<T(&)[2]>(comp)[0];
ar & reinterpret_cast<T(&)[2]>(comp)[1];
}
}
Diese standardmäßig ermöglicht Version und Klassen Info-Tracking, den Code nach unten ziemlich viel verlangsamt. Die Serialisierungsfunktion, die mit Boost geliefert wird, ist ein bisschen schneller.
Ich würde jetzt gerne auf die Verwendung der Boost-Version immer beim Schreiben neuer Datendateien, aber immer noch in der Lage sein, alte Dateien einzulesen. Das Einlesen neuer Dateien mit einer alten Binärdatei ist kein Problem.
Das Problem ist, dass die neue Serialisierung (natürlich) nicht versioniert ist. Außerdem sehe ich nicht einmal, wie ich versuchen könnte, ein Archiv mit der alten Version des Codes zu lesen und sofort wieder mit der neuen Version zu schreiben, da die Deserialisierungs-/Serialisierungseigenschaften globale Eigenschaften sind.
Was wäre der beste Weg, entweder a) alte und neue Dateien transparent einzulesen, während immer neue Dateien geschrieben werden, oder b) eine alte Datei einzulesen und sofort in das neue Format zu schreiben?
„mit einem alten binären in neuen Dateien zu lesen, ist kein Thema“ einstellen - was bedeutet, dass bedeuten – sehe
@sehe: Ich möchte alte Datendateien mit neuen Binärdateien aus dem neuen Code kompiliert lesen. Ich möchte neue Datendateien mit vorhandenen Binärdateien aus früheren Versionen des Codes nicht einlesen. – Claudius