使用std::string 序列化一個類別
序列化包含std::string 的類別會因為字串的指標而面臨挑戰以自然為基礎。將類別轉換為 char* 並將其寫入檔案的標準技術將不起作用,就像對於原始資料類型一樣。
自訂序列化函數
標準解決方法涉及為類別建立自訂序列化和反序列化函數。這些函數以受控方式處理類別資料的讀寫。
範例函數
對於包含名為「name」的 std::string的類,序列化和反序列化函數可以實現如下:
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; }
重載流運算子
為了更方便使用,您可以重載類的流運算子:
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; }
使用這些函數和重載,您現在可以序列化和反序列化包含std的類別:: 只需使用流運算子即可字串。
以上是如何序列化包含 std::string 的 C 類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!