没有模板化参数的函数模板专用化

Function template specialization without templated argument

本文关键字:函数模板 专用 参数      更新时间:2023-10-16

让我们看看一个模板函数,它接受void参数并返回void:

template<class T>
void f() {
    cout << "template" << endl;
}

稍后我们专门研究这个功能:

template<>
void f<int> () {
    cout << "int" << endl;
}
template<>
void f<double> () {
    cout << "double" << endl;
}
int main() {
    f<int> ();
    f<double> ();
}

问题是为什么要编译?我们有三个具有相同签名的函数:void(void),并且我期望它应该与多个声明决裂?

这是因为您明确说明了要使用哪个函数。由于模板参数的差异,f<int>()无法映射到f<double>();即这是一个完全明确的调用。

为什么它不能工作?这是三种不同的实现,具体取决于模板参数。实例化模板时使用的每个不同值都会创建整个模板化内容的全新副本。所以在这里你做了三个函数,它们都是独一无二的,而且效果很好。

顺便说一下,符号名称将不仅仅是f,查找C++名称篡改。