Bagaimana untuk Mensiri dan Menyahseri Kelas C dengan Jenis Data Tersuai?

DDD
Lepaskan: 2024-10-30 05:39:03
asal
498 orang telah melayarinya

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

Bagaimana hendak melakukan pensirilan Kelas yang mempunyai ahli jenis data tersuai dalam C ?

Masalah

Matlamatnya adalah untuk mensiri dan menyahsiri kelas C Mangga yang mengandungi ahli jenis data tersuai.

Pelaksanaan

Pelaksanaan yang dicadangkan termasuk fungsi berikut:

<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>
Salin selepas log masuk

Penyesuaian untuk Jenis Data

Penyesuaian diperlukan untuk semua jenis yang berkaitan (termasuk ValType, FuntionMango, MangoType dan Mango):

<code class="cpp">// Define `do_generate` and `do_parse` functions
// for custom data types.</code>
Salin selepas log masuk

Contoh Pelaksanaan

<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>
Salin selepas log masuk

Pertimbangan Mudah Alih

  • Endianness mungkin perlu dinormalisasi, yang boleh dilakukan secara manual atau menggunakan perpustakaan seperti Boost Endian (header-only).

Nota Tambahan

  • Pendekatan ini membolehkan data menjadi disimpan dan dipindahkan dengan cekap antara proses atau sistem yang berbeza.

Contoh Langsung:

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

Atas ialah kandungan terperinci Bagaimana untuk Mensiri dan Menyahseri Kelas C dengan Jenis Data Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan