C++ 0x में, आप तो जैसे, कंस्ट्रक्टर्स वारिस के using
कीवर्ड का उपयोग कर सकते हैं:विरासत रचनाकार सी ++ 0x में टेम्पलेट्स के साथ काम करते हैं?
class B { B(int) {} };
class A : public B { using B::B; };
कौन परोक्ष एक A(int)
निर्माता घोषित करेंगे। क्या यह टेम्पलेट्स के साथ काम करता है?
class B { B(int) {} };
template<class T> class A : public T { using T::T; };
T::T
के भीतर, मैं संकलक टेम्पलेट तर्क पर गुंजाइश ऑपरेटर का उपयोग के बाद से बाएं हाथ T
यह पता लगाने की उम्मीद सामान्य है, लेकिन पता लगाना है कि दाहिने हाथ T
निर्माता है एक विशेष मामला है। असल में ऐसा लगता है कि एक अस्पष्टता है: क्या होगा यदि में T
नामक एक विधि है, तो मैं A
में अधिभार जोड़ने की कोशिश कर रहा हूं (इस प्रकार एक कंपाइलर इस तरह की घोषणा का उपयोग पूर्व-सी ++ 0x) की व्याख्या करेगा?
नहीं है कि ठीक होगा क्योंकि 'typename T' एक विधि नामित टी यह प्रकार प्रतीक के लिए एक प्लेसहोल्डर का प्रतिनिधित्व करता है का प्रतिनिधित्व नहीं करता के द्वारा उपयोग टेम्पलेट का तात्कालिकता। उदाहरण के लिए 'ए' का परिणाम 'int :: int;' का उपयोग करेगा ... चेतावनी का शब्द: एक प्रकार के साथ क्या होता है जिसका मतलब एसटीएल कंटेनर जैसी बेस क्लास नहीं है? –
AJG85
आप सदस्य चर प्रश्न पर सही हैं। एक एसटीएल कंटेनर की विरासत के लिए, यह काम करेगा, लेकिन यदि आप पॉलिमॉर्फिक फैशन में प्रकार का उपयोग करना चाहते हैं तो आपको जोखिम हो रहा है। लेकिन अगर आप बस डी> बना रहे हैं, और उसके बाद इसे एक ही स्थान पर उपयोग कर रहे हैं, तो यह काम करेगा। यह अच्छा अभ्यास नहीं है, लेकिन यह काम करेगा। –
सही लेकिन यह निश्चित रूप से कुछ ध्यान में रखना है क्योंकि व्युत्पन्न वस्तु में राज्य जोड़ना या बेस क्लास पॉइंटर्स का उपयोग करना गलती से टेम्पलेट के रूप में पेश किया जा सकता है, बाद में समस्या के बाद विरासत और मूल कारण को खराब कर देता है। – AJG85