其他分享
首页 > 其他分享> > 模板特化(全特化、偏特化)

模板特化(全特化、偏特化)

作者:互联网

模板特化

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

模板全特化

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

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

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

示例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