模板的特化分为两类:函数模板的特化和类模板的特化。
(1) 函数模板的特化:当函数模板需要对某些类型进行特别处理,称为函数模板的特化。例如:
#include <iostream>
#include <string.h>
using namespace std;
template<class T>
bool isBigger(T t1, T t2)
{
return t1 > t2;
}
template<>
bool isBigger(char* str1, char* str2)
{
return strcmp(str1, str2);
}
int main ()
{
char s1[] = "hello";
char s2[] = "world";
cout<<isBigger(7,6)<<endl;
cout<<isBigger(s1, s2)<<endl;
return 0;
}
(2) 类模板的特化:当类模板内需要对某些类型进行特别处理时,使用类模板的特化。例如:
#include <iostream>
#include <string.h>
using namespace std;
template<class T>
class compare
{
public:
bool isBigger(T t1, T t2)
{
cout<<"hello world"<<endl;
return t1 > t2;
}
};
template<>
class compare<char*>
{
public:
bool isBigger(char* t1, char* t2)
{
cout<<"hello char*"<<endl;
return strcmp(t1, t2);
}
};
int main ()
{
char s1[] = "hello";
char s2[] = "world";
compare<int> c1;
compare<char*> c2;
cout<<c1.isBigger(7,6)<<endl;
cout<<c2.isBigger(s1, s2)<<endl;
return 0;
}
总结:
- 模板的特化是在已有的通用模板不再适用于一些特殊的类型参数时,而针对这些特殊的类型参数专门实现的模板。
- 必须先写通用的模板,再写特化模板。