2013-06-27 19 views
5

कुछ स्लाइडों से अधिक भार बनाम:खाका समारोह विशेषज्ञता टेम्पलेट विशेषज्ञता के बारे में

#include <iostream> 

using namespace std; 

template<class X> 
X& min(X& a, X& b) 
{ 
    return a > b ? b : a; 
} 

int& min(int& a, int & b) 
{ 
    // rewrite of the function in the case of int: 
    cout << "int explicit function\n"; 
    return a > b ? b : a; 
} 

/* 
new syntax – the more appropriate way: 
template<> 
int& min<int>(int& a, int& b) 
{ 
    cout << "int explicit function\n"; 
    return a > b ? b : a; 
} 
*/ 

क्यों दूसरा तरीका अधिक "उचित" है?

+2

प्रासंगिक पढ़ने: [फ़ंक्शन टेम्पलेट्स का विशेषज्ञ क्यों नहीं है?] (Http://www.gotw.ca/publications/mill17.htm) – juanchopanza

+0

क्या ये स्लाइड ऑनलाइन उपलब्ध हैं? –

+0

@ वॉन एक ड्रॉपबॉक्स फ़ोल्डर में ... – nodwj

उत्तर

1

अधिभार अधिकांश संदर्भों के लिए ठीक काम करता है, और AFAIK सुझाए गए बेसलाइन दृष्टिकोण है। (GOTW juanchopanza द्वारा सुझाए गए)

कोई अंतर स्पष्ट रूप से टेम्पलेट के लिए पूछता है, min<int>(x, y) पर कॉल करने पर अंतर हिट करता है। उस स्थिति में ओवरलोड को नजरअंदाज कर दिया जाता है और केवल टेम्पलेट (आधार या विशेष) माना जाता है।

+0

अगर कोई अन्य फ़ंक्शन के भीतर से फ़ंक्शन का उपयोग करता है। – Daemin

+1

@ डेमिन: क्या आप इसका मतलब विस्तार कर सकते हैं? –

+0

एक समारोह में 'टेम्पलेट टी foo (कॉन्स टी एंड ए, कॉन्स टी एंड बी)' वे 'मिनट (ए, बी) कहते हैं; इसलिए यह किसी भी गैर-टेम्पलेटेड ओवरलोड के बावजूद टेम्पलेट संस्करण का उपयोग करेगा। – Daemin

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