सी में जटिल डेटा सदस्यों के साथ एक क्लास को क्रमबद्ध और डिसेरिएलाइज़ कैसे करें
परिचय
क्रमबद्धता में किसी ऑब्जेक्ट की स्थिति को बाइट्स की एक धारा में अनुवाद करना शामिल है जिसे संग्रहीत किया जा सकता है और बाद में उसी के साथ ऑब्जेक्ट में वापस बनाया जा सकता है राज्य। यह आलेख सी में कस्टम डेटा प्रकारों के सदस्यों के साथ एक वर्ग को क्रमबद्ध और डीसेरिएलाइज़ करने पर मार्गदर्शन प्रदान करता है, जो इष्टतम गति, पोर्टेबिलिटी और मेमोरी दक्षता के लिए कार्यान्वयन सुझाव प्रदान करता है।
सीरियलाइज़ेशन इंटरफ़ेस को परिभाषित करना
एक उचित क्रमांकन इंटरफ़ेस को क्रमांकन (बाइट्स में कनवर्ट करना) और डीसेरिएलाइज़िंग (बाइट्स से पुनर्निर्माण) दोनों के लिए कार्यों को परिभाषित करना चाहिए। क्रमबद्ध फ़ंक्शन के लिए अनुशंसित रिटर्न प्रकार बाइट्स का एक वेक्टर है, std::vector
कस्टम डेटा प्रकार क्रमांकन
std::vector<uint8_t> serialize(Mango const& Man);
Mango deserialize(std::span<uint8_t const> data);
namespace MangoLib { एनम क्लास वैलटाइप: uint8_t { #UseValType को परिभाषित करें #लाइन परिभाषित करें (नाम, मान, स्ट्रिंग) नाम = मान रेखा(शून्य_, 0, "शून्य"), लाइन(int_, 1, "int"), लाइन(बूल_, 2, "बूल"), लाइन(स्ट्रिंग_, 3, "स्ट्रिंग"), #अनडेफ़ लाइन #undef यूज़वैलटाइप }; }इस प्रकार के लिए, आप एक क्रमांकन फ़ंक्शन को परिभाषित करेंगे:
नेमस्पेस मैंगोलिब { टेम्प्लेट आउट do_generate(आउट आउट, ValType const& x) { my_serialization_helpers::do_generate का उपयोग करना; वापसी do_generate(बाहर, static_cast<:underlying_type_t>>(x)); } }namespace MangoLib {
enum class ValType : uint8_t {
#define UseValType
#define Line(NAME, VALUE, STRING) NAME = VALUE
Line(void_, 0, "void"),
Line(int_, 1, "int"),
Line(bool_, 2, "bool"),
Line(string_, 3, "string"),
#undef Line
#undef UseValType
};
}
कार्यान्वयनnamespace MangoLib {
template <typename Out>
Out do_generate(Out out, ValType const& x) {
using my_serialization_helpers::do_generate;
return do_generate(out,
static_cast<std::underlying_type_t<ValType>>(x));
}
}
निम्नलिखित कार्यान्वयन सुझाव गति, पोर्टेबिलिटी और पर विचार करते हैं मेमोरी दक्षता:बाइट-ऑर्डर: लगातार बाइट-ऑर्डर सुनिश्चित करें यदि आवश्यक हो तो प्लेटफ़ॉर्म-विशिष्ट कार्यों के माध्यम से। :
मेमोरी और गति को अनुकूलित करने के लिए स्ट्रिंग्स के क्रमांकन को अनुकूलित करें।कंटेनर अनुकूलन का उपयोग करें:
अनुकूलन का उपयोग करें जैसे कि उपयोग करते समय क्षमता आरक्षण और पूर्व-आवंटन कंटेनर।हेडर-केवल क्रमांकन:
लिंकिंग निर्भरता से बचने के लिए हेडर-केवल क्रमांकन पुस्तकालयों जैसे कि संदेशपैक या अनाज को नियोजित करें ।यूनिट परीक्षण: सटीकता और शुद्धता के लिए क्रमबद्धता और अक्रमांकन का पूरी तरह से परीक्षण करें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3