template <class T>
void max (T &a ,T &b)
{}//generic template #1
template<> void max(char &c, char &d)
{} //template specializtion #2
void max (char &c, char &d)
{}//ordinary function #3
Run Code Online (Sandbox Code Playgroud)
1,2和3有什么区别?
Gre*_*osz 10
以下是C++编码标准的摘录:101规则,指南和最佳实践:
66)不要专门化功能模板
函数模板特化从不参与重载:因此,您编写的任何特化都不会影响使用哪个模板,这与大多数人直观期望的相反.毕竟,如果您使用相同的签名而不是函数模板专门化编写了非模板函数,则始终会选择非模板函数,因为它始终被认为是比模板更好的匹配.
本书建议您通过在类模板方面实现函数模板来添加间接级别:
#include <algorithm>
template<typename T>
struct max_implementation
{
T& operator() (T& a, T& b)
{
return std::max(a, b);
}
};
template<typename T>
T& max(T& a, T& b)
{
return max_implementation<T>()(a, b);
}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |