1、类模板
#include <iostream>
using namespace std;
//-----------------------------通用类模板---------------------------
template<class T1,class T2>//通用模板
class Compare //在这里不能写类型
{
private:
T1 num1;
T2 num2;
public:
Compare();
};
template<class T1,class T2> //这里必须写
Compare<T1,T2>::Compare ()
{
cout << "通用模板" << endl;
}
//--------------------------类模板全特化------------------------
template<> //类模板全特化
class Compare<char*,char*> //在这里写上所需要的类型
{
private:
char* num1;
char* num2;
public:
Compare();
};
//template<> //全特化这行代码不能写!!!
Compare<char* ,char*>::Compare()
{
cout << "全特化" << endl;
}
//--------------------------类模板偏特化--------------------------
template<class T2> //类模板偏特化
class Compare<float,T2> //偏特化类型T1 特化为float类型
{
private:
float num1;
T2 num2;
public:
Compare();
};
template<class T2> //偏特化这里必须要写
Compare<float,T2>::Compare()
{
cout << "偏特化"<< endl;
}
//-------------------------------测试---------------------------------
int main(int argc, char *argv[])
{
Compare <int ,int> p1; //打印通用函数
Compare <char*,char*> p2; //打印全特化
Compare <float,int> p3; //打印偏特化
return 0;
}
2、函数模板
#include <iostream>
#include<string.h>
using namespace std;
//--------------------------函数模板---------------------------------
template<class T1,class T2>
bool test(T1 t1, T2 t2)
{
return t1 == t2;
}
//--------------------------模板全特化--------------------------------
template<> //因为字符串比较不能通过直接相等来比较,的特化一下
bool test <char*> (char* t1,char* t2) //标明特化类型
{
return strcmp(t1,t2);
}
//----------------------------测试------------------------------------
int main(int argc, char *argv[])
{
char str1[20] = "helle";
char str2[20] = "hello";
if(test(str1,str2) == 0){ //会去调用特化后的模板
cout << "t1 == t2 " << endl;
}else{
cout << "t1 != t2 " << endl;
}
return 0;
}