#include <iostream>
template <class T>
void foo(T) {
std::cout << "foo(T)" << std::endl;
}
template <class T>
void foo(T*) { //#3
std::cout << "foo(T*)" << std::endl;
}
#define TEST
#ifdef TEST
template <>
void foo(int*) { //#1
std::cout << "foo(int*)" << std::endl;
}
#else
template <>
void foo<int*>(int*) { //#2
std::cout << "foo<int*>(int*)" << std::endl;
}
#endif
int main(int argc, char **argv) {
int* p = 0;
foo(p);
return 0;
}
# 1 और # 2 के बीच क्या अंतर है। अगर मैं टेस्ट, # 1 काम परिभाषित करता हूं। लेकिन अगर मैं इसे टिप्पणी करता हूं, # 3 काम ... और फ़ंक्शन टेम्पलेट विशेषज्ञता लिखने का सही तरीका कौन सा है ...फ़ंक्शन टेम्पलेट विशेषज्ञता विफल रही?
कुछ संदर्भों जहां यह सुविधाजनक या टेम्पलेट तर्क निर्दिष्ट करने के लिए आवश्यक है (रों) कर रहे हैं । स्पष्ट स्थान जहां तर्क निर्दिष्ट करना आवश्यक है, यदि टेम्पलेट तर्क गैर-कटौती नहीं है। स्थान जहां यह सुविधाजनक है, जब आपको तर्क को उचित रूप से परिवर्तित प्रकार पर निर्देशित करने की आवश्यकता होती है। जब आप स्पष्ट रूप से तर्क निर्दिष्ट करना चाहते हैं तो आप अक्सर ओवरलोडिंग का उपयोग नहीं कर सकते हैं। –