模板特化(全特化、偏特化)
作者:互联网
模板特化
将模板中的参数指定为特定的类型,模板特化之后可以针对特效类型实现特定的功能。
模板全特化
所有参数都特化为确定的类型。
模板类和模板函数都可以全特化。
全特化的模板参数列表是空的。
示例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);
}
标签:info,int,char,template,模板,特化 来源: https://blog.csdn.net/kenfan1647/article/details/120249287