[C++] टेम्पलेट्स में कीवर्ड 'टाइपनाम' और 'क्लास' का अंतर?


Answers

टेम्पलेट पैरामीटर नामकरण के लिए, typename और class बराबर हैं। §14.1.2:

टेम्पलेट-पैरामीटर में कक्षा और टाइपनाम के बीच कोई अर्थपूर्ण अंतर नहीं है।

हालांकि टेम्पलेट का उपयोग करते समय typename को किसी अन्य संदर्भ में संभव है - उस संकलक पर संकेत देने के लिए जिसे आप एक निर्भर प्रकार का जिक्र कर रहे हैं। §14.6.2:

एक टेम्पलेट घोषणा या परिभाषा में उपयोग किया जाने वाला नाम और यह टेम्पलेट-पैरामीटर पर निर्भर है, माना जाता है कि लागू नाम लुकअप को एक प्रकार का नाम नहीं मिलता है या नाम कीवर्ड टाइपनाम द्वारा योग्यता प्राप्त होती है।

उदाहरण:

typename some_template<T>::some_type

typename के बिना कंपाइलर सामान्य रूप से नहीं बता सकता है कि आप किसी प्रकार का जिक्र कर रहे हैं या नहीं।

Question

टेम्पलेट्स के लिए मैंने दोनों घोषणाएं देखी हैं:

template < typename T >
template < class T >

क्या फर्क पड़ता है?

और उन खोजशब्दों का क्या अर्थ है निम्नलिखित उदाहरण में (टेम्पलेट्स के बारे में जर्मन विकिपीडिया लेख से लिया गया)?

template < template < typename, typename > class Container, typename Type >
class Example
{
     Container< Type, std::allocator < Type > > baz;
};



  1. कोई फर्क नहीं
  2. टेम्पलेट प्रकार पैरामीटर Container स्वयं दो प्रकार के पैरामीटर के साथ एक टेम्पलेट है।