函数模板的特化

来源:互联网 发布:淘宝卖家为什么怕差评 编辑:程序博客网 时间:2024/06/04 08:03
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*时的特殊情况,此时直接调用下面的函数,就不会通过上面的函数模板进行生成..
它与重载不同的是,如果我们没有使用到这个特化的函数,它是不会生成的,,也就是不会进行实例化.不占用内存空间..而重载是会占用内存空间的.

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

0 0
原创粉丝点击