template<typename T>
T max(T lhs, T rhs)
{
return lhs > rhs ? lhs : rhs;
}
int main()
{
max(1,2);
max("a","b");
}
该模板函数能够比较整型等数据类型的大小,,但是对于字符串,这种比较的方式就是错误的.
此时我们需要对该函数模板进行特化处理
template<>
const char* max(const char* lhs, const char* rhs)
{
return strcmp(lhs,rhs) > 0 ? lhs : rhs;
}
这种情况代表这T为const char*时的特殊情况,此时直接调用下面的函数,就不会通过上面的函数模板进行生成..
它与重载不同的是,如果我们没有使用到这个特化的函数,它是不会生成的,,也就是不会进行实例化.不占用内存空间..而重载是会占用内存空间的.
关于重载函数,,模板函数,以及模板函数之间的调用顺序
在符合调用规则的情况下,函数的调用顺序是,首先调用重载的函数,,其次调用特化的函数,最后调用模板函数