首页 > 后端开发 > C++ > 如何在 C 中序列化和反序列化具有自定义数据类型成员的类?

如何在 C 中序列化和反序列化具有自定义数据类型成员的类?

Mary-Kate Olsen
发布: 2024-10-31 21:18:02
原创
184 人浏览过

How to Serialize and Deserialize Classes with Custom Data Type Members in C  ?

C 中具有自定义数据类型成员的类的序列化

问题:

如何您可以有效地序列化和反序列化包含多个自定义数据类型成员的类吗?

答案:

要有效地序列化和反序列化包含自定义数据类型的类,请考虑以下事项:

建议接口:

<code class="cpp">std::vector<uint8_t> serialize(Mango const&amp; Man);
Mango                deserialize(std::span<uint8_t const>> data);</code>
登录后复制

实现:

<code class="cpp">std::vector<uint8_t> serialize(Mango const&amp; Man) {
    std::vector<uint8_t> bytes;
    do_generate(back_inserter(bytes), Man);
    return bytes;
}

Mango deserialize(std::span<uint8_t const> data) {
    Mango result;
    auto  f = begin(data), l = end(data);
    if (!do_parse(f, l, result))
        throw std::runtime_error("deserialize");
    return result;
}

void serialize_to_stream(std::ostream&amp; os, Mango const&amp; Man)  {
    do_generate(std::ostreambuf_iterator<char>(os), Man);
}

void deserialize(std::istream&amp; is, Mango&amp; Man) {
    Man = {}; // clear it!
    std::istreambuf_iterator<char> f(is), l{};
    if (!do_parse(f, l, Man))
        throw std::runtime_error("deserialize");
}</code>
登录后复制

自定义数据类型解析器和生成器:

它们处理自定义数据类型的序列化/反序列化(有关详细示例,请参阅答案)。

可移植性:

  • 必要时确保字节顺序一致。
  • 考虑使用 Boost Endian(仅标头)来规范跨平台字节顺序。

附加说明:

  • 自定义数据类型必须易于复制才能实现高效序列化。
  • 避免直接使用 boost 序列化,因为它需要链接。
  • 考虑使用建议的仅标头帮助程序功能灵活且高效。

以上是如何在 C 中序列化和反序列化具有自定义数据类型成员的类?的详细内容。更多信息请关注PHP中文网其他相关文章!

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