【发布时间】:2020-09-25 16:29:28
【问题描述】:
这是一个简单的例子:
#include <iostream>
template <class T>
void print(T in){
printf("NOT printing int\n");
}
template <> // <-- template specialization
void print<int>(int in){
printf("printing int\n");
}
int main(){
print(5); // printing int
return 0;
}
但是int 版本可以不用模板就可以写出来,像这样:
void print(int in){
printf("printing int\n");
}
那么这里的模板特化有什么意义呢?
编辑(可能需要的示例)
#include <iostream>
template <class T>
void print(){
printf("printing float\n");
}
template <>
void print<int>(){
printf("printing int\n");
}
int main(){
print<float>();
return 0;
}
【问题讨论】:
-
想想返回值。
-
对于函数,重载通常比专业化更受欢迎。但也有针对类的专业化(例如特征)。
-
我不确定你的问题是什么。假设模板特化在这种特殊情况下没有用。它在其他地方仍然有用。
-
这样的模板仍然可以方便地用于其他只传递类型参数的模板。
-
你能举个其他地方的例子吗?
标签: c++