Cara Mensiri dan Menyahseri Kelas dengan Ahli Jenis Data Tersuai dalam C
Pengenalan
Serialization melibatkan menukar keadaan objek kepada format yang boleh disimpan dan kemudian dibina semula. Apabila berurusan dengan struktur data yang kompleks seperti kelas dengan ahli jenis data tersuai, siri menjadi sangat relevan.
问题
Soalan utama ada dua:
Respon
Penyelesaian 1: Melaksanakan Fungsi bersiri
Prototaip yang dicadangkan untuk fungsi bersiri ialah:
<code class="cpp">std::vector<uint8_t> serialize(Mango const& Man);</code>
Fungsi ini menerima objek Mango melalui rujukan (Man) dan mengembalikan std::vektor bait yang mewakili data bersiri.
Penyelesaian 2: Melaksanakan Fungsi deserialisasi
Fungsi deserialisasi yang sepadan mempunyai prototaip berikut:
<code class="cpp">Mango deserialize(std::span<uint8_t const> data);</code>
Ia mengambil masa beberapa bait (data) dan mengembalikan objek Mango yang dibina daripada data yang dinyahsiri.
Cadangan Pelaksanaan
Berdasarkan fungsi pembantu yang diterangkan di bawah, pelaksanaan yang dicadangkan ini menawarkan pensirilan dan penyahsirilan yang cekap:
<code class="cpp">// Serialization function std::vector<uint8_t> serialize(Mango const& Man) { std::vector<uint8_t> bytes; do_generate(back_inserter(bytes), Man); return bytes; } // Deserialization function Mango deserialize(std::span<uint8_t const> data) { Mango result; auto f = begin(data), l = end(data); if (!do_parse(f, l, result)) throw std::runtime_error("deserialize"); return result; }</code>
Pembantu Pensiri Tersuai
Fungsi pembantu ini (dilaksanakan dalam ruang nama my_serialization_helpers) menyediakan kefungsian siri dan penghuraian teras:
Penjana (do_generate Fungsi):
Penghurai (Fungsi do_parse):
Pensirian Jenis Tersuai
Untuk mensiri jenis data tersuai dalam kelas Mango, fungsi do_generate dan do_parse tambahan ditakrifkan untuk setiap jenis:
Contoh Penggunaan
Contoh yang disediakan menunjukkan pensirilan dan penyahsirilan objek Mango, mengesahkan integritinya melalui keluaran pusing dan nyahpepijat.
Kemudahalihan dan Kehebatan
Endianness tidak semestinya diambil kira dalam pelaksanaan ini. Untuk memastikan mudah alih merentas seni bina perkakasan yang berbeza, langkah tambahan untuk menormalkan endian mungkin diperlukan. Perpustakaan seperti Boost Endian boleh digunakan untuk tujuan ini tanpa memerlukan pemautan perpustakaan.
Atas ialah kandungan terperinci Bagaimana untuk Mensiri dan Menyahseri Kelas C dengan Ahli Jenis Data Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!