5

मान लीजिए मैं कहाँ प्रकार पैरामीटर केवल एक वापसी प्रकार के रूप में प्रयोग किया जाता है एक समारोह टेम्पलेट है:वाक्य रचना संदेह

template <typename T> 
T foo() 
{ 
    return whatever; 
} 

तो सही सिंटैक्स विशेषज्ञ कि समारोह टेम्पलेट क्या है? निम्नलिखित दोनों काम करने लगते हैं:

template <> 
std::string foo() 
{ 
    return whatever; 
} 

template <> 
std::string foo<std::string>() 
{ 
    return whatever; 
} 

क्या दोनों के बीच कोई अंतर है? यदि नहीं, तो मूर्खतापूर्ण तरीका क्या है?

उत्तर

1

कंपाइलर प्रदान की गई सूचनाओं (यहां, फ़ंक्शन रिटर्न प्रकार) के आधार पर सही टेम्पलेट विशेषज्ञता को कम करेगा।

तो इन वाक्यविन्यासों में बिल्कुल वही व्यवहार है, जो कि दूसरे की तुलना में अधिक स्पष्ट है।

1

ज्यादातर मामलों में, दोनों के बीच कोई अंतर नहीं है।

यदि आप कई टेम्पलेट फ़ंक्शंस को अधिभारित करते हैं, तो दूसरी विशेषता को अस्पष्टता को दूर करने के लिए आवश्यक हो सकता है जिसके बारे में आप अधिग्रहण करना चाहते हैं (यदि आप इस स्थिति में हैं तो आपको शायद अन्य समस्याएं हैं, उदाहरण के लिए आपको भी होने की आवश्यकता होगी कॉल स्थानों पर स्पष्ट)।

+0

इस उदाहरण के साथ, कॉल साइटों पर टेम्पलेट तर्क को कम करना पहले से ही असंभव है। –