"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पॉलीमॉर्फिक बेस क्लास पॉइंटर्स से व्युत्पन्न क्लास इंस्टेंसेस की प्रतियां कैसे बनाएं: वर्चुअल क्लोन विधियों और सीआरटीपी का उपयोग करके एक समाधान

पॉलीमॉर्फिक बेस क्लास पॉइंटर्स से व्युत्पन्न क्लास इंस्टेंसेस की प्रतियां कैसे बनाएं: वर्चुअल क्लोन विधियों और सीआरटीपी का उपयोग करके एक समाधान

2024-11-07 को प्रकाशित
ब्राउज़ करें:892

How to Create Copies of Derived Class Instances from Polymorphic Base Class Pointers: A Solution Using Virtual Clone Methods and CRTP

पॉलीमॉर्फिक बेस क्लास पॉइंटर्स से व्युत्पन्न क्लास इंस्टेंस को कॉपी करना

कई लोगों के लिए, यह प्रोग्रामिंग पहेली मायावी साबित हुई है। आइए इसमें शामिल जटिलताओं का पता लगाएं और एक कुशल समाधान खोजें।

निम्नलिखित परिदृश्य पर विचार करें: आपके पास बेस, व्युत्पन्न1, व्युत्पन्न2, आदि कक्षाएं हैं, जहां व्युत्पन्न कक्षाएं बेस से प्राप्त होती हैं। बेस ऑब्जेक्ट के लिए एक सूचक को देखते हुए, लक्ष्य अंतर्निहित व्युत्पन्न ऑब्जेक्ट की एक गतिशील रूप से आवंटित प्रतिलिपि बनाना है, "अस्थायी का रिटर्निंग पता" जैसे मुद्दों से बचना है।

परंपरागत रूप से, इसे एक लिटनी के माध्यम से संबोधित किया गया है सशर्त कथनों के भीतर टाइपिड्स या डायनामिक_कास्ट की। हालाँकि, हम एक अधिक सुंदर समाधान की तलाश में हैं। प्रकार। यह विधि ऑब्जेक्ट की एक प्रति लौटाती है। यदि बेस अमूर्त नहीं है, तो आप इसके कॉपी कंस्ट्रक्टर को लागू कर सकते हैं, लेकिन इस दृष्टिकोण में स्लाइसिंग का जोखिम होता है यदि इसे व्युत्पन्न कक्षाओं में ठीक से लागू नहीं किया जाता है।

कोड पुन: उपयोग के लिए सीआरटीपी मुहावरा

कोड डुप्लिकेशन से बचने के लिए, सीआरटीपी (क्यूरियसली रिकरिंग टेम्पलेट पैटर्न) मुहावरे को नियोजित किया जा सकता है। निम्नलिखित सामान्य टेम्पलेट पर विचार करें:

टेम्पलेट वर्ग व्युत्पत्ति सहायक : सार्वजनिक आधार { जनता: वर्चुअल बेस* क्लोन() स्थिरांक { नई व्युत्पन्न वापसी(static_cast(*यह)); } };इस टेम्पलेट का उपयोग करके, कई व्युत्पन्न वर्ग DerivationHelper से प्राप्त कर सकते हैं और अपने संबंधित कॉपी कंस्ट्रक्टर का उपयोग करके क्लोन() विधि को कार्यान्वित कर सकते हैं।

कार्यान्वयन और लाभ
template 
class DerivationHelper : public Base
{
public:
  virtual Base* clone() const
  {
    return new Derived(static_cast(*this));
  }
};

यह समाधान कई लाभ प्रदान करता है:

सरलता: कोड संक्षिप्त और लागू करने में आसान है।

एक्स्टेंसिबिलिटी: नए व्युत्पन्न वर्गों को जोड़ने के लिए बेस क्लास को संशोधित करने की आवश्यकता नहीं है।

प्रदर्शन: वर्चुअल फ़ंक्शन कॉल अपेक्षाकृत कुशल हैं।
  • वर्चुअल क्लोन() विधि और सीआरटीपी मुहावरे को अपनाकर, प्रोग्रामर जटिल या जटिल आवश्यकता के बिना वांछित कार्यक्षमता को प्रभावी ढंग से प्राप्त कर सकते हैं। त्रुटि-प्रवण दृष्टिकोण।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3