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

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

Patricia Arquette
Lepaskan: 2024-11-03 08:13:30
asal
672 orang telah melayarinya

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

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:

  1. Bagaimanakah cara untuk melaksanakan fungsi pensirilan dengan cekap yang mengembalikan data bersiri sebagai vektor bait?
  2. Bagaimana untuk mereka bentuk fungsi penyahsirian yang sesuai untuk membina semula objek daripada data bersiri?

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

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

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

Pembantu Pensiri Tersuai

Fungsi pembantu ini (dilaksanakan dalam ruang nama my_serialization_helpers) menyediakan kefungsian siri dan penghuraian teras:

  • Penjana (do_generate Fungsi):

    • Tukar jenis data dan bekas primitif kepada jujukan bait.
  • Penghurai (Fungsi do_parse):

    • Ekstrak data daripada jujukan bait dan bina struktur data yang sepadan.

Pensirian Jenis Tersuai

Untuk mensiri jenis data tersuai dalam kelas Mango, fungsi do_generate dan do_parse tambahan ditakrifkan untuk setiap jenis:

  • ValType, FuntionMango, MangoType dan Mango boleh disiri dan dinyahsiri menggunakan pembantu ini.

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan