ठीक है, यह कबूल करना वास्तव में मुश्किल है, लेकिन मुझे इस समय से विरासत में एक मजबूत प्रलोभन है std::vector
।
मुझे वेक्टर के लिए लगभग 10 अनुकूलित एल्गोरिदम चाहिए और मैं चाहता हूं कि वे सीधे वेक्टर के सदस्य हों। लेकिन स्वाभाविक रूप से मैं भी बाकी std::vector
इंटरफ़ेस चाहता हूं । ठीक है, मेरा पहला विचार, कानून का पालन करने वाले नागरिक के रूप में, कक्षा std::vector
में एक सदस्य होना था MyVector
। लेकिन तब मुझे मैन्युअल रूप से सभी std :: वेक्टर के इंटरफ़ेस को फिर से बनाना होगा। टाइप करने के लिए बहुत ज्यादा। इसके बाद, मैंने निजी विरासत के बारे में सोचा, ताकि मैं रीप्रोविंग के तरीकों के बजाय using std::vector::member
सार्वजनिक खंड में एक गुच्छा लिखूं । यह वास्तव में थकाऊ है।
और यहाँ मैं कर रहा हूँ, मुझे वास्तव में लगता है कि मैं केवल सार्वजनिक रूप से विरासत में प्राप्त कर सकता हूं std::vector
, लेकिन प्रलेखन में एक चेतावनी प्रदान करता हूं कि इस वर्ग का उपयोग पॉलीमॉर्फिक रूप से नहीं किया जाना चाहिए। मुझे लगता है कि अधिकांश डेवलपर्स यह समझने के लिए पर्याप्त रूप से सक्षम हैं कि इसका उपयोग किसी भी तरह से बहुरूपिक रूप से नहीं किया जाना चाहिए।
क्या मेरा निर्णय बिल्कुल अनुचित है? यदि हां, तो क्यों? क्या आप एक विकल्प प्रदान कर सकते हैं जिसमें अतिरिक्त सदस्य वास्तव में सदस्य होंगे, लेकिन वेक्टर के सभी इंटरफ़ेस को फिर से शामिल करना शामिल नहीं होगा? मुझे संदेह है, लेकिन अगर आप कर सकते हैं, तो मैं बस खुश रहूंगा।
इसके अलावा, इस तथ्य के अलावा कि कुछ बेवकूफ कुछ लिख सकते हैं
std::vector<int>* p = new MyVector
वहाँ MyVector का उपयोग करने में कोई अन्य यथार्थवादी संकट है? यथार्थवादी कहकर मैं एक समारोह की कल्पना करता हूं जो वेक्टर के लिए एक पॉइंटर लेता है ...
खैर, मैंने अपना मामला बताया है। मैंने पाप किया है। अब यह आप पर है कि मुझे माफ करें या नहीं :)
std::vector
का इंटरफ़ेस काफी विशाल है, और जब C ++ 1x साथ आता है, तो यह बहुत विस्तार करेगा। टाइप करने के लिए बहुत कुछ है और कुछ वर्षों में विस्तार करना है। मुझे लगता है कि यह एक अच्छा कारण है कि हम नियमन के बजाय विरासत पर विचार करें - यदि कोई इस आधार का पालन करता है कि उन कार्यों को सदस्य होना चाहिए (जो मुझे संदेह है)। एसटीएल कंटेनरों से नहीं निकलने का नियम यह है कि वे बहुरूपिए नहीं हैं। यदि आप उन्हें इस तरह से उपयोग नहीं कर रहे हैं, तो यह लागू नहीं होता है।