2011-10-16 26 views
11

क्या यह वैध टेम्पलेट सी ++ टेम्पलेट्स में बना है?फ़ंक्शन पर टेम्पलेट टेम्पलेट पैरामीटर

template < template <typename T2> class T> 
void foo() { 

} 
+3

@ChrisLutz, मुझे लगता है कि 'टी 2' वैकल्पिक है। – iammilind

+0

@ChrisLutz: मुझे लगता है, वास्तव में नहीं। http://ideone.com/8jlI5 – Nawaz

+0

@ नवाज - मुझे कहीं और पढ़ना याद है। मुझे लगता है कि आज पूरी जगह गलत है। मेरी गलती। –

उत्तर

13

हां। यह मान्य है।

आप जो बिल्कुल एक टेम्पलेट पैरामीटर लेता है किसी भी वर्ग टेम्पलेट के साथ इस समारोह कॉल कर सकते हैं। उदाहरण के लिए,

template<typename T> 
struct A 
{ 
    //... 
}; 

foo<A>(); //ok 

नोट आप की जरूरत नहीं है कि A वर्ग टेम्पलेट, जिसका अर्थ है, निम्नलिखित संकलन त्रुटि में परिणाम होगा के लिए टेम्पलेट तर्क प्रदान करने के लिए:

foo< A<int> >(); //error 

इसके अलावा, अपने कोड में T2 वैकल्पिक है, और वास्तव में, आप इसे समारोह में उपयोग नहीं कर सकते, तो बेहतर इसे हटाने परिभाषा सरल बनाने के लिए:

template < template <typename> class T> 
void foo() { 

    T<int> x; //this is how T can be instantiated; provide template argument! 
} 

डेमो: http://ideone.com/8jlI5

+0

इस मामले में 'टी 2' की तरह, क्या यह हमेशा वैकल्पिक है? मैं कक्षा टेम्पलेट्स पर इसका उपयोग नहीं कर सका। http://ideone.com/LEt6N – user103214

+0

@ उपयोगकर्ता 974191: हां। यह कभी जरूरी नहीं है। आप टेम्पलेट परिभाषा में इसका उपयोग नहीं कर सकते! – Nawaz

संबंधित मुद्दे