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

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

DDD
DDD原創
2024-10-30 05:39:03498瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn