首頁 > 後端開發 > C++ > 主體

如何在 C 中序列化和反序列化具有自訂資料類型成員的類別?

Mary-Kate Olsen
發布: 2024-10-31 21:18:02
原創
124 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!