2011-07-03 28 views
7

हम टेम्पलेट क्यों करना चाहिए <वर्ग/typename> बस टेम्पलेट टी के बजाय टी

template <typename T> 
void func(T arg) {/* something */} 

करने के बजाय हम क्यों नहीं कर सकते

template <T> 
void func(T arg) {/* something */} 
cplusplus.com से

:

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

यह मेरे लिए अनावश्यक बॉयलरप्लेट जैसा लगता है।

उत्तर

11

http://www.cplusplus.com/doc/tutorial/templates/ टेम्पलेट्स के लिए गैर-प्रकार पैरामीटर पर अनुभाग देखें।

आपको गैर-प्रकार पैरामीटर से टाइप-पैरामीटर को अलग करने के लिए कुछ कीवर्ड चाहिए।

template <class T, int N> 
class mysequence { 
    T memblock [N]; 
    public: 
    void setmember (int x, T value); 
    T getmember (int x); 
}; 
+0

या यहां तक ​​कि 'टेम्पलेट <कक्षा टी, int एन, टेम्पलेट टीटी > ', सभी तीन संभावित टेम्पलेट तर्क दिखाने के लिए। – MSalters

8

क्योंकि टेम्पलेट तर्क हमेशा प्रकार नहीं होते हैं। आपके पास एक टेम्पलेट तर्क हो सकता है जो कि एक अभिन्न मान है, उदाहरण के लिए, std::bitset<size_t N> के मामले में।

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