“专业不参与超载”

问题描述 投票:2回答:1

<<] >>我用其专用版本编写了一个简单的模板函数,可以看到该专用模块被称为:// 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"

总之,如果有人可以举例说明(以及为什么要调用基本模板,那么我仍在试图弄清楚“功能模板的专业化不参与重载解析。仅考虑基本模板”的含义。在第二个示例中)。其次,在第二个示例中,为什么程序在没有变量名的情况下编译并运行良好。

[“功能模板的专业化不参与重载解析。仅考虑基本模板”是什么意思,我写了一个简单的模板函数及其专门的...
c++ templates
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.