2014-12-11 11 views
7

अस्पष्ट शीर्षक के लिए खेद है, अगर आपको बेहतर लगता है तो इसे संपादित करने के लिए स्वतंत्र महसूस करें। Priority between normal function and Template function, में एक संबंधित विषय पर गहराई से चर्चा की गई है लेकिन मुझे अपने प्रश्न का उत्तर नहीं मिला।समान नाम वाले विभिन्न फ़ंक्शन टेम्पलेट्स के बीच प्राथमिकता ओवरलोडिंग

मेरे कोड है:

template<typename T> 
void f(T t){std::cout << "Template 1" << std::endl;} // template 1 

template<typename T, typename B> 
void f(T t){std::cout << "Template 2" << std::endl;} // template 2 

int main() { 
    f(1); // line 1, template 1 will be called 
    f<int>(1); // template 1 will be called 
    f<int,int>(1); // template 2 will be called 
} 

संभव कारण यह है कि टेम्पलेट 1 समारोह लाइन 1 में कहा जाता है क्या है? क्या यह विनिर्देशन में अच्छी तरह परिभाषित है?

लाइन 1 पर, मुझे लगता है कि कंपाइलर को "अस्पष्ट अधिभार" त्रुटि देना चाहिए।

उत्तर

5

B को घटाया नहीं जा सकता है (कोई पैरामीटर B टाइप नहीं है) इसलिए टेम्पलेट 1 एकमात्र संभावित ओवरलोड शेष है।

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