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` लिखता, तो कंपाइलर सोच सकता था कि...