首頁 > 後端開發 > C++ > 如何使用自訂資料類型序列化和反序列化 C 類?

如何使用自訂資料類型序列化和反序列化 C 類?

DDD
發布: 2024-10-30 05:39:03
原創
506 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板