浅说模板的局限性


template<class T>
void f(T a,T b)
{
a = b;
}
上面的赋值操作并不是都可行,比如说两个数组

再比如
template<class T>
void f(T a,T b)
{
if(a < b){.....};
}
如果传的是类,怎么比较啊,并不知道比较规则啊

 不过可以通过运算符重载 ==

不过太麻烦了

可以通过具体化来实现

#include<bits/stdc++.h>
using namespace std;

class person
{
public:
    person(string name,int age)
    {
        this->m_name = name;
        this->m_age = age;
    }
    string m_name;
    int m_age;
};

template<class T>
bool cmp(T &a,T &b)
{
    if(a == b) return 1;
    else return 0;
}

//只有具体化才可以通用模板,不写这个person传进去是错的
//具体化person版本
template<> bool cmp(person &p1,person &p2)
{
    if(p1.m_age == p2.m_age && p1.m_name == p2.m_name) return 1;
    else return 0;
}

void test()
{
    int a = 10,b = 10;
    cout << cmp(a,b) << endl;
    person p1("aa",10);
    person p2("aa",10);
    //如果不利用具体化的模板,是不可以的下面这行,
    //只有具体化才可以通用模板
    cout << cmp(p1,p2) << endl;
    p1.m_age = 11;
    cout << cmp(p1,p2) << endl;
}
int main()
{
    test();
    return 0;
}

  

posted @ 2019-10-14 21:03  ChunhaoMo  阅读(127)  评论(0编辑  收藏  举报