首页 > 后端开发 > C++ > 如何在 C 中正确序列化包含 std::string 的类?

如何在 C 中正确序列化包含 std::string 的类?

Barbara Streisand
发布: 2024-12-10 03:41:09
原创
624 人浏览过

How to Properly Serialize a Class Containing an std::string in C  ?

序列化包含 std::string 的类:理解指针困境

序列化是用于保存对象状态的关键技术用于存储或转移。然而,由于 std::strings 的指针性质,序列化包含 std::strings 的类会带来挑战。

尝试通过将包含 std::string 的类转换为 char 来序列化包含 std::string 的类时会出现此问题* 并将其写入文件。此方法适用于简单数据类型,但不适用于 std::strings,因为它不考虑指针依赖性。

指针序列化的标准解决方法

要克服对于这个问题,标准的解决方法包括将序列化和反序列化方法引入到类中。这些方法手动处理对象内部数据(包括指针)的写入和读取。

示例实现如下:

// Serialization method
std::ostream& MyClass::serialize(std::ostream &out) const {
    // Serialize numeric values using the output stream
    out << height;
    out << ',' // Separator
    out << width;
    out << ',' // Separator
    
    // Serialize the std::string
    out << name.size(); // String length
    out << ',' // Separator
    out << name; // String characters
    
    return out;
}

// Deserialization method
std::istream&amp; MyClass::deserialize(std::istream &amp;in) {
    if (in) {
        // Deserialize numeric values using the input stream
        int len=0;
        char comma;
        in >> height;
        in >> comma; // Separator
        in >> width;
        in >> comma; // Separator
        
        // Deserialize the std::string
        in >> len; // String length
        in >> comma; // Separator
        if (in &amp;&amp; len) {
            std::vector<char> tmp(len);
            in.read(tmp.data() , len); // String characters
            name.assign(tmp.data(), len);
        }
    }
    return in;
}
登录后复制

重载流运算符可以简化这些运算符的使用方法:

std::ostream &amp;operator<<(std::ostream&amp; out, const MyClass &amp;obj)
{obj.serialize(out); return out;}
std::istream &amp;operator>>(std::istream&amp; in, MyClass &amp;obj)
{obj.deserialize(in); return in;}
登录后复制

通过使用这些技术,std::strings 可以作为更大类的一部分进行有效的序列化和反序列化,保留它们的完整性和指针依赖性。

以上是如何在 C 中正确序列化包含 std::string 的类?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板