Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mensiri Kelas C yang Mengandungi std::string?
Mensiri Kelas dengan std::string
Mensiri kelas yang mengandungi std::string membentangkan cabaran disebabkan penuding rentetan -berasaskan alam semula jadi. Teknik standard menghantar kelas ke char* dan menulisnya ke fail tidak akan berfungsi, seperti yang dilakukan untuk jenis data primitif.
Fungsi Pensiri Tersuai
Penyelesaian standard melibatkan mencipta fungsi bersiri tersuai dan penyahserikatan untuk kelas. Fungsi ini mengendalikan pembacaan dan penulisan data kelas dengan cara terkawal.
Fungsi Contoh
Untuk kelas yang mengandungi std::string bernama "name", fungsi bersiri dan penyahsirilan boleh dilaksanakan seperti berikut:
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; }
Strim Lebih Muatan Operator
Untuk penggunaan yang lebih mudah, anda boleh terlebih muatan operator strim untuk kelas anda:
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; }
Dengan fungsi dan lebihan ini, anda kini boleh mensiri dan menyahsiri kelas yang mengandungi std :: rentetan dengan hanya menggunakan operator strim.
Atas ialah kandungan terperinci Bagaimana untuk Mensiri Kelas C yang Mengandungi std::string?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!