<<] >>我用其专用版本编写了一个简单的模板函数,可以看到该专用模块被称为:// Base template
template <typename T>
T max(T a, T b) {
std::cout << "Base Template" << std::endl;
return (a>b) ? a : b;
}
// Specialization for int
template<>
int max<int>(int a, int b) {
std::cout << "int specialization" << std::endl;
return (a>b) ? a : b;
}
max(2,3);// prints "int specialization"
[查看与此概念相关的其他StackOverflow,我发现了另一篇文章,以证明专业化不参与重载,他展示了以下示例,其中未调用专业化版本,但我仍不确定为什么不叫。但是除此之外,在此示例中,参数没有变量名,但(char const* const&)
template<typename T>
void f(T const&)
{
std::cout<<std::endl<<"Base Template for f() called\n";
}
template<>
void f<char const * const &>(char const* const&)
{
std::cout<<std::endl<<"Specialized f() for char const* called\n";
}
f("Hello") //prints "Base Template for f() called"
总之,如果有人可以举例说明(以及为什么要调用基本模板,那么我仍在试图弄清楚“功能模板的专业化不参与重载解析。仅考虑基本模板”的含义。在第二个示例中)。其次,在第二个示例中,为什么程序在没有变量名的情况下编译并运行良好。
[“功能模板的专业化不参与重载解析。仅考虑基本模板”是什么意思,我写了一个简单的模板函数及其专门的...