Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mensiri dan Menyahseri Kelas C dengan Jenis Data Tersuai?

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

DDD
Lepaskan: 2024-10-30 05:39:03
asal
560 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!

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