Avatar ·

C++ में template और typename कीवर्ड कहाँ और क्यों लगाने चाहिए?

नमस्ते, साथियों! मैं लगभग एक साल से C++ में लिख रहा हूँ, लेकिन टेम्पलेट अब भी मेरे लिए सिरदर्द का कारण हैं। विशेष रूप से, dependent names के संदर्भ में `template` और `typename` कीवर्ड मुझे भ्रमित करते हैं। मैं समझता हूँ कि ये कंपाइलर को कोड पार्स करने में मदद करने के लिए आवश्यक हैं, लेकिन इन्हें वास्तव में कब लगाना चाहिए — यह मेरे लिए एक पहेली है। यहाँ एक विशिष्ट उदाहरण है जो मुझे भ्रमित करता है। मान लीजिए, मेरे पास एक टेम्पलेट क्लास-कंटेनर है, और मैं एक फंक्शन लिखना चाहता हूँ जो इस कंटेनर का इटरेटर लेता है और nested type `value_type` तक पहुँचता है: ```cpp #include template void processContainer(const Container& c) { typename Container::const_iterator it = c.begin(); // ... इटरेटर के साथ कुछ करते हैं } ``` यहाँ मुझे `Container::const_iterator` से पहले `typename` लिखना पड़ता है। क्यों? आखिरकार, `const_iterator` `std::vector` के अंदर एक पूरी तरह से परिभाषित प्रकार है। मैं समझता हूँ कि अगर मैं सिर्फ `Container::const_iterator` लिखता, तो कंपाइलर सोच सकता था कि...