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

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

DDD
DDDasal
2024-10-30 05:39:03421semak imbas

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>

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>

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>

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:
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