使用 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中文网其他相关文章!