1.函数模板
template<typename T1,typename T2>
void fun(T1 a, T2 b)//定义了a,b两个数
{
cout << "这是一个函数模板" << endl;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
}
template<>
void fun(int a,string b)//fun函数的特例化
{
cout << "这是一个函数模板的特例化" << endl;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
}
int main()
{
string s = "张三";
fun(2, 2);//调用了函数模板
fun(1,s);//调用了函数特例化模板
}
2.类模板的特例化
类模板稍微有点不同,就是提供模板参数的个数可以是部分(也就是偏特化),也可以是全部(即是全特化),而函数模板特例化只能是全特化。
template<typename T1, typename T2>
class student
{
public:
student()
{
cout << "这是一个类模板" << endl;
}
T1 a;
T2 b;
};
template<typename T2>
class student<int, T2>
{
public:
student(int a, T2 b) :a(a), b(b)
{
cout << "这是一个类模板偏特化" << endl;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
}
int a = 10;
T2 b;
};
template<>
class student<int, string>
{
public:
student(int c, string d):a(c),b(d)
{
cout << "这是一个类模板全特化" << endl;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
}
int a;
string b;
};
int main()
{
student<char,int>s;
student<int,double> s2(1,2.56);
student<int, string>s3(1, "李四");
return 0;
}