यहाँ के लिए लेखन क्लोन विधि मेरी मामला है:रोकें प्रत्येक उपवर्ग
class A
{
public:
virtual A* clone() = 0;
};
class B : public A
{
virtual B* clone() override
{
return new B();
}
};
मेरी कोड A
की sublcasses के अब 100% में सिर्फ clone
विधि ठीक उसी तरह केवल वर्ग D
के लिए मैं वापसी प्रकार D
है लागू और मैं निश्चित रूप से D
का ऑब्जेक्ट बना देता हूं।
मैं इस डुप्लिकेशन को कैसे रोक सकता हूं? क्या पैटर्न या चाल मदद कर सकते हैं?
मैंने CRTP pattern का उपयोग करने का विचार किया है, लेकिन यह टेम्पलेट का उपयोग करता है, और मेरा कार्य वर्चुअल है। जैसा कि हम टेम्पलेट्स और आभासी कार्यों को समझते हैं असंगत हैं।
NVI pattern या तो काम नहीं करता है, क्योंकि क्लोन विधियों के रिटर्न प्रकार अलग हैं।
आप सीआरटीपी, टेम्पलेट्स और आभासी कार्यों का उपयोग कर सकते हैं प्रति असंगत नहीं हैं। –
शायद आप नहीं कर सकते, मुझे यकीन है कि आप शुद्ध वर्चुअल फ़ंक्शंस को पूरा करने के लिए विरासत का उपयोग कर सकते हैं या नहीं। हालांकि यह अभी भी टेम्पलेट्स से स्वतंत्र है। हो सकता है कि आप एकाधिक विरासत का उपयोग न करें बल्कि एक मध्यवर्ती वर्ग का उपयोग करके, 'कक्षा बी: सार्वजनिक क्लोनेबल {...} 'और' टेम्पलेट <कक्षा बी, कक्षा डी> कक्षा क्लोनबल: सार्वजनिक बी {.. ।} '। –
आपका डुप्लिकेट कोड क्या है? प्रत्येक उपclass में क्लोन विधियों की परिभाषा केवल नए टी कॉल के साथ?या यह आपके असली प्रोजेक्ट में क्लोन विधियों में एक बड़ा कोड है? यदि यह दूसरा मामला है, तो आप केवल एक टेम्पलेट फ़ंक्शन कर सकते हैं जो किसी ऑब्जेक्ट को क्लोन करता है और इस क्लोन फ़ंक्शन को आपके क्लोन विधियों से कॉल करता है। – Johnmph