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& MyClass::deserialize(std::istream& 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 && 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 &operator<<(std::ostream& out, const MyClass &obj) { obj.serialize(out); return out; } std::istream &operator>>(std::istream& in, MyClass &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!