"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إجراء تسلسل وإلغاء تسلسل فئة C++ باستخدام أنواع البيانات المخصصة؟

كيفية إجراء تسلسل وإلغاء تسلسل فئة C++ باستخدام أنواع البيانات المخصصة؟

تم النشر بتاريخ 2024-11-11
تصفح:697

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

كيفية إجراء تسلسل للفئة التي تحتوي على أعضاء من أنواع البيانات المخصصة في لغة C؟

المشكلة

الهدف هو إجراء تسلسل وإلغاء تسلسل فئة C مانجو الذي يحتوي على أعضاء من أنواع البيانات المخصصة.

التنفيذ

يتضمن التنفيذ المقترح ما يلي الوظائف:

std::vector serialize(Mango const& Man);
Mango                deserialize(std::span data);

void serialize_to_stream(std::ostream& os, Mango const& Man);
void deserialize(std::istream& is, Mango& Man);

التخصيصات لأنواع البيانات

التخصيصات مطلوبة لجميع الأنواع ذات الصلة (بما في ذلك ValType وFuntionMango وMangoType وMango):

// Define `do_generate` and `do_parse` functions
// for custom data types.

مثال للتنفيذ

void serialize_to_stream(std::ostream& os, Mango const& Man) {
    do_generate(std::ostreambuf_iterator(os), Man);
}

void deserialize(std::istream& is, Mango& Man) {
    Man = {}; // clear it!
    std::istreambuf_iterator f(is), l{};
    if (!do_parse(f, l, Man))
        throw std::runtime_error("deserialize");
}
اعتبارات قابلية النقل

    قد يلزم تطبيع Endianness، وهو ما يمكن إجراؤه يدويًا أو باستخدام مكتبة مثل Boost Endian (الرأس فقط).
ملاحظات إضافية

    يسمح هذا الأسلوب بتخزين البيانات ونقلها بكفاءة بين العمليات المختلفة أو الأنظمة.

مثال حي:https://coliru.stacked-crooked.com/a/288829ec964a3ca9

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3