Heim >Backend-Entwicklung >C++ >Wie serialisiere ich eine C-Klasse, die einen std::string enthält?

Wie serialisiere ich eine C-Klasse, die einen std::string enthält?

DDD
DDDOriginal
2024-12-08 18:57:13597Durchsuche

How to Serialize a C   Class Containing an std::string?

Serialisieren einer Klasse mit einem std::string

Das Serialisieren einer Klasse, die einen std::string enthält, stellt aufgrund des Zeigers des Strings Herausforderungen dar -basierte Natur. Die Standardtechnik, die Klasse in ein char* umzuwandeln und in eine Datei zu schreiben, funktioniert nicht, wie dies bei primitiven Datentypen der Fall ist.

Benutzerdefinierte Serialisierungsfunktionen

Eine standardmäßige Problemumgehung besteht darin, benutzerdefinierte Serialisierungs- und Deserialisierungsfunktionen für die Klasse zu erstellen. Diese Funktionen handhaben das Lesen und Schreiben der Klassendaten auf kontrollierte Weise.

Beispielfunktionen

Für eine Klasse, die einen std::string namens „name“ enthält, Die Serialisierungs- und Deserialisierungsfunktionen könnten wie folgt implementiert werden:

std::ostream& MyClass::serialize(std::ostream& out) const {
    out << height;
    out << ',' // number separator
    out << width;
    out << ',' // number separator
    out << name.size(); // serialize size of string
    out << ',' // number separator
    out << name; // serialize characters of string
    return out;
}

std::istream&amp; MyClass::deserialize(std::istream&amp; in) {
    if (in) {
        int len = 0;
        char comma;
        in >> height;
        in >> comma; // read in the separator
        in >> width;
        in >> comma; // read in the separator
        in >> len; // deserialize size of string
        in >> comma; // read in the separator
        if (in &amp;&amp; len) {
            std::vector<char> tmp(len);
            in.read(tmp.data(), len); // deserialize characters of string
            name.assign(tmp.data(), len);
        }
    }
    return in;
}

Stream überladen Operatoren

Zur einfacheren Verwendung können Sie die Stream-Operatoren für Ihre Klasse überladen:

std::ostream &amp;operator<<(std::ostream&amp; out, const MyClass &amp;obj) {
    obj.serialize(out);
    return out;
}

std::istream &amp;operator>>(std::istream&amp; in, MyClass &amp;obj) {
    obj.deserialize(in);
    return in;
}

Mit diesen Funktionen und Überladungen können Sie jetzt eine Klasse, die einen Standard enthält, serialisieren und deserialisieren ::string indem Sie einfach die Stream-Operatoren verwenden.

Das obige ist der detaillierte Inhalt vonWie serialisiere ich eine C-Klasse, die einen std::string enthält?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn