अंतिम अद्यतन:2026-10-12
C++ टेम्पलेट disambiguator¶
1.बैकग्राउंड¶
हाल ही में एक कोड देखा:
क्या आप बता सकते हैं, यहाँ .template का क्या मतलब है?
यह सेक्शन वास्तविक उदाहरणों से शुरू करके इसके महत्व पर चर्चा करेगा।
2.template disambiguator¶
C++ में, जब टेम्पलेट के dependent names का उपयोग किया जाता है, तो कभी-कभी कंपाइलर की मदद के लिए template disambiguator की ज़रूरत पड़ती है ताकि वह इन नामों में अंतर कर सके। "dependent names" से तात्पर्य उन टाइप्स या वैल्यूज़ से है जो टेम्पलेट पैरामीटर पर निर्भर होते हैं, कंपाइलर टेम्पलेट इंस्टेंशिएट होने से पहले उनका सटीक अर्थ निर्धारित नहीं कर सकता। इससे कंपाइलर इन नामों को पार्स करते समय द्विअर्थता (ambiguity) का सामना कर सकता है।
template disambiguator "template" कीवर्ड का उपयोग करके कंपाइलर को स्पष्ट रूप से बताता है कि कोई खास नाम एक टेम्पलेट है। इस तरह कंपाइलर उस नाम को सही ढंग से पार्स कर पाता है और द्विअर्थता नहीं उत्पन्न होती।
template कीवर्ड केवल :: (स्कोप रेज़ोल्यूशन), -> (पॉइंटर के ज़रिए मेंबर एक्सेस) और . (मेंबर एक्सेस) ऑपरेटरों के साथ उपयोग हो सकता है, निम्नलिखित सभी मान्य उदाहरण हैं
- T::template foo
(); - s.template foo
(); - this->template foo
(); - typename T::template iterator
::value_type v;
आधिकारिक सामग्री:
मान लीजिए नीचे दिया गया कोड है, अगर हम .template न लगाएँ तो क्या मिलेगा?
template <typename T>
auto foo_is_not_a_template() {
// ((T::foo) < 34) > (::val())
return T::foo<34>::val();
}
उपरोक्त को इस तरह पार्स किया जाएगा: ((T::foo) < 34) > (::val())
इसके संगत .template वाला उदाहरण है:
इस तरह कॉल सही ढंग से टेम्पलेट, foo<34> के रूप में पार्स होगा।
इस सेक्शन का पूरा कोड Knowledge Planet पर जारी किया जाएगा, रुचि हो तो जुड़ सकते हैं, धन्यवाद!
संबंधित विषय¶
- C++ प्योर वर्चुअल फ़ंक्शन और एब्स्ट्रैक्ट क्लास | C++那些事
- C++ assert | C++那些事
- C++ bit-field | C++那些事
- C भाषा से C++ पॉलीमॉर्फ़िज़्म | C++那些事
- C++ const constant और qualifier | C++那些事
- C++ const परिवार | C++那些事
- C++ dereference ऑपरेटर * | C++那些事
- C++ इनिशियलाइज़ेशन और असाइनमेंट | C++那些事
- C++ multiple return values लिखने के तरीके | C++那些事
- C++ mutable कीवर्ड | C++那些事