模板特化、重载

模板特化

将模板中的参数指定为特定的类型,模板特化之后可以针对特效类型实现特定的功能。

模板全特化

所有参数都特化为确定的类型。

模板类和模板函数都可以全特化。

全特化的模板参数列表是空的。

示例1,函数全特化:

template<typename T> T add(T t1,T t2)
{
    return t1 + t2;
}

这个模板函数int类型可以正常使用,但char不行,这时候可以特化一个char类型的:

template<typename T> T add(T t1,T t2)
{
    return t1 + t2;
}

template<> char add(char c1,char c2) //注意,这里模板参数列表为空
{
    return (c1 + c2 - 192)%26 + 96;
}

int main(int argc, char *argv[])
{
    qDebug()<< add<char>('a','b');
}

示例2,类全特化:

template <> class info <QString,QString>
{
public:
    info(QString name, QString age)
    {
        qDebug()<<"构建 template <> class info <QString,QString>";
    }
};

模板偏特化

模板参数列表有多个参数时,将部分参数特化。

只能用于模板类,模板函数不能偏特化。

例:

template <typename T1,typename T2> class info
{
public:
    info(T1 name, T2 age)
    {
        qDebug()<<"构建 template <typename T1,typename T2> class info";
    }
};

template <typename T1> class info<T1,int>
{
public:
    info(T1 name, int age)
    {
        qDebug()<<"构建 template <typename T1> class info<T1,int>";
    }
};

int main(int argc, char *argv[])
{
    info<QString,int>("张三",88);
}

模板的重载

重载函数是普通函数,并非模板函数。 

如果重载函数和模板的某种类型的类型参数相同,依次按以下规则匹配:

  1. 参数完全匹配的普通函数。
  2. 模板参数完全匹配的函数模板。
  3. 隐式转换后匹配的普通函数。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值