कुछ स्थितियों में, जहाँ आप तथाकथित निर्भर प्रकार के सदस्य को संदर्भित करते हैं (जिसका अर्थ है "टेम्पलेट पैरामीटर पर निर्भर"), संकलक हमेशा परिणामी निर्माण के शब्दार्थ अर्थ को कम नहीं कर सकता है, क्योंकि यह नहीं जानता कि यह किस प्रकार का नाम है (यानी चाहे वह किसी प्रकार का नाम हो, डेटा सदस्य का नाम हो या किसी और चीज़ का नाम हो)। इस तरह के मामलों में आपको संकलक को स्पष्ट रूप से यह बताकर स्थिति को भंग करना होगा कि नाम उस आश्रित प्रकार के सदस्य के रूप में परिभाषित टाइपनाम से संबंधित है।
उदाहरण के लिए
template <class T> struct S {
typename T::type i;
};
इस उदाहरण typenameमें कोड को संकलित करने के लिए आवश्यक कीवर्ड ।
यही बात तब होती है जब आप एक प्रकार के आश्रित सदस्य को संदर्भित करना चाहते हैं, अर्थात एक नाम जो टेम्पलेट तैयार करता है। आपको कीवर्ड का उपयोग करके कंपाइलर की भी मदद करनी होगी template, हालांकि इसे अलग तरह से रखा गया है
template <class T> struct S {
T::template ptr<int> p;
};
कुछ मामलों में दोनों का उपयोग करना आवश्यक हो सकता है
template <class T> struct S {
typename T::template ptr<int>::type i;
};
(अगर मुझे सही ढंग से वाक्यविन्यास मिला है)।
बेशक, कीवर्ड की एक और भूमिका typenameटेम्पलेट पैरामीटर घोषणाओं में उपयोग की जानी है।