学习C++,发现了功能模板.本章提到了模板专业化.
template <> void foo<int>(int);
void foo( int );
为什么专注于你可以使用第二个?我认为模板可以概括.当你可以使用常规函数时,为特定数据类型专门化一个函数有什么意义?
显然,模板专业化存在是有原因的.什么时候应该使用?我读过Sutter的"为什么不专攻......"一文,但我需要更多的外行人版本,因为我只是在学习这些东西.
Dav*_*eas 12
主要区别在于,在第一种情况下,您为编译器提供了特定类型的实现,而在第二种情况下,您提供了一个不相关的非模板化函数.
如果总是让编译器推断出类型,编译器会优先使用非模板化函数,编译器将调用自由函数而不是模板,因此提供与参数匹配的非模板化函数将具有在大多数情况下,专业化效果相同.
另一方面,如果在任何地方你提供了模板参数(而不是让编译器推断),那么它只会调用通用模板并可能产生意想不到的结果:
template <typename T> void f(T) {
std::cout << "generic" << std::endl;
}
void f(int) {
std::cout << "f(int)" << std::endl;
}
int main() {
int x = 0;
double d = 0.0;
f(d); // generic
f(x); // f(int)
f<int>(x); // generic !! maybe not what you want
f<int>(d); // generic (same as above)
}
Run Code Online (Sandbox Code Playgroud)
如果您已为int模板提供了特殊化,则最后两个调用将调用该特化而不是通用模板.
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |