函数模板具体化

我们知道函数模板是把数据类型参数化了,一个函数模板可以传入不同的数据类型,都可以使用这个函数功能,但这里的数据类型只是基础数据类型,我们自己定义的数据类型就不可以,因为c++的编译者们并不知道用户定义的是什么样的数据类型,这个时候我们就要把函数模板具体化,其实就是告诉编译器我们自己定义的数据类型该怎么样使用:
class Maker{
public:
    Maker(string name, int age)
    {
        this->name = name;
        this->age = age;
    }
public:
    string name;
    int age;
};
template<class T>
void mySwap(T &a, T &b)//要有这个函数模版,下面的具体化函数模版才不会报错
{
    if (a > b)
    {
        cout << "a>b" << endl;
    }
    else{
        cout << "a<=b" << endl;
    }   
}
//具体化函数模版,具体化函数模版优先于常规函数模版
template<> void mySwap<Maker>(Maker &p1, Maker &p2)
{
    cout << "具体化" << endl;
    if (p1.age > p2.age)
    {
        cout << "p1>p2" << endl;
    }
    else
    {
        cout << "p1<=p2" << endl;
    }
}
int main()
{
        int a = 10;
    int b = 20;
    mySwap(a, b);
    
    Maker p1("悟空", 20);
    Maker p2("布尔玛", 24);

    mySwap(p1, p2);
        return 0;
}

标签: none

添加新评论