函数模板的特化

时间:2022-04-28 05:32:52
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*时的特殊情况,此时直接调用下面的函数,就不会通过上面的函数模板进行生成..
它与重载不同的是,如果我们没有使用到这个特化的函数,它是不会生成的,,也就是不会进行实例化.不占用内存空间..而重载是会占用内存空间的.

关于重载函数,,模板函数,以及模板函数之间的调用顺序
在符合调用规则的情况下,函数的调用顺序是,首先调用重载的函数,,其次调用特化的函数,最后调用模板函数