सी कंटेनरों में विषम वस्तुओं को संग्रहीत करना
सी कंटेनरों को आमतौर पर सजातीय तत्वों की आवश्यकता होती है, जिसका अर्थ है कि वे केवल एक ही प्रकार की वस्तुओं को रख सकते हैं। हालाँकि, ऐसी स्थितियाँ हैं जहाँ आपको एक कंटेनर की आवश्यकता हो सकती है जो डेटा प्रकारों के मिश्रण को समायोजित कर सके। यह आलेख बताता है कि boost::any लाइब्रेरी और एक कस्टम दृष्टिकोण का उपयोग करके इसे कैसे प्राप्त किया जाए। जो किसी भी प्रकार का C धारण कर सकता है। एक कंटेनर में boost::any के उदाहरणों को संग्रहीत करके, आप वस्तुओं का एक विषम संग्रह प्राप्त कर सकते हैं। यह दृष्टिकोण इसकी मजबूती और किनारे के मामलों से निपटने के लिए अनुशंसित है।
कस्टम कार्यान्वयन
यदि आप अधिक मैन्युअल दृष्टिकोण पसंद करते हैं, तो आप एक कस्टम संरचना या संघ बना सकते हैं सक्रिय प्रकार को निर्दिष्ट करने के लिए एक संकेतक के साथ सभी अपेक्षित प्रकारों के सदस्यों को जोड़ता है।
संरचना दृष्टिकोण:
struct HeterogeneousContainer { int मैं; एसटीडी::स्ट्रिंग एस; डबल डी; पूर्णांक प्रकार; // इंट के लिए 0, स्ट्रिंग के लिए 1, डबल के लिए 2 };संघ दृष्टिकोण (सावधानी के साथ उपयोग करें):
struct HeterogeneousContainer {
int i;
std::string s;
double d;
int type; // 0 for int, 1 for string, 2 for double
};
संघ विषमकंटेनर {
int मैं;
एसटीडी::स्ट्रिंग एस;
डबल डी;
};हालाँकि, इस दृष्टिकोण की सीमाएँ और संभावित नुकसान हैं, जैसे:
union HeterogeneousContainer {
int i;
std::string s;
double d;
};
एक निष्क्रिय सदस्य को पढ़ना इसके परिणामस्वरूप अपरिभाषित व्यवहार हो सकता है।सही प्रकार निर्दिष्ट है यह सुनिश्चित करने के लिए सावधानीपूर्वक प्रबंधन की आवश्यकता है और एक्सेस किया गया।अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3