Maison >développement back-end >C++ >Comment sérialiser une classe C contenant un std :: string ?
Sérialiser une classe avec un std::string
Sérialiser une classe qui contient un std::string présente des défis en raison du pointeur de la chaîne -nature basée. La technique standard consistant à convertir la classe en char* et à l'écrire dans un fichier ne fonctionnera pas, comme c'est le cas pour les types de données primitifs.
Fonctions de sérialisation personnalisées
Une solution de contournement standard consiste à créer des fonctions de sérialisation et de désérialisation personnalisées pour la classe. Ces fonctions gèrent la lecture et l'écriture des données de classe de manière contrôlée.
Exemples de fonctions
Pour une classe contenant un std::string nommé "name", les fonctions de sérialisation et de désérialisation pourraient être implémentées comme suit :
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; }
Surcharge du flux Opérateurs
Pour une utilisation plus facile, vous pouvez surcharger les opérateurs de flux de votre classe :
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; }
Avec ces fonctions et surcharges, vous pouvez désormais sérialiser et désérialiser une classe contenant un std ::string en utilisant simplement les opérateurs de flux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!