浅说模板的局限性
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;
}


浙公网安备 33010602011771号