首页 > 后端开发 > C++ > 正文

如何使用自定义数据类型序列化和反序列化 C 类?

DDD
发布: 2024-10-30 05:39:03
原创
434 人浏览过

How to Serialize and Deserialize a C   Class with Custom Data Types?

如何对 C 中具有自定义数据类型成员的类进行序列化?

问题

目标是序列化和反序列化 C 类Mango 包含自定义数据类型的成员。

实现

建议的实现包括以下函数:

<code class="cpp">std::vector<uint8_t> serialize(Mango const& Man);
Mango                deserialize(std::span<uint8_t const> data);

void serialize_to_stream(std::ostream& os, Mango const& Man);
void deserialize(std::istream& is, Mango& Man);</code>
登录后复制

数据类型的自定义

自定义所有相关类型(包括 ValType、FuntionMango、MangoType 和 Mango)都需要:

<code class="cpp">// Define `do_generate` and `do_parse` functions
// for custom data types.</code>
登录后复制

示例实现

<code class="cpp">void serialize_to_stream(std::ostream& os, Mango const& Man) {
    do_generate(std::ostreambuf_iterator<char>(os), Man);
}

void deserialize(std::istream& is, Mango& 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(仅标头)之类的库来完成。

附加说明

  • 这种方法允许数据在不同进程或系统之间高效存储和传输。

实例:

https://coliru.stacked-crooked.com/a/288829ec964a3ca9

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!