C++ में template और typename कीवर्ड कहाँ और क्यों लगाने चाहिए?
नमस्ते साथियों! मैं कुछ महीनों से C++ में कोड लिख रहा हूँ, लेकिन टेम्पलेट्स अब भी मेरे सिरदर्द का कारण हैं। विशेष रूप से `template` और `typename` कीवर्ड मुझे भ्रमित करते हैं। मैं समझता हूँ कि वे dependent names से संबंधित हैं, लेकिन व्यवहार में मुझे लगातार कम्पाइलेशन एरर मिलती हैं।
यहाँ एक विशिष्ट उदाहरण है जिसने मुझे परेशान किया। मान लीजिए मेरे पास एक टेम्पलेट क्लास कंटेनर है, और मैं एक फंक्शन लिखना चाहता हूँ जो नेस्टेड iterator टाइप के एलिमेंट्स को प्रिंट करे:
```cpp
#include
#include
template
void printFirst(const T& container) {
T::const_iterator it = container.begin(); // Error!
std::cout << *it << std::endl;
}
int main() {
std::vector vec = {1, 2, 3};
printFirst(vec);
return 0;
}
```
कम्पाइलर (GCC) देता है: `error: need 'typename' before 'T::const_iterator' because 'T' is a dependent scope`। मैं `typename` लगाता हूँ — एरर चली जाती है। लेकिन जब मैं नेस्टेड टेम्पलेट के साथ कुछ ऐसा ही करने की कोशिश करता हूँ...