C++中,模板的特化可以实现对不同的数据类型进行不同的处理:
比如我们要对int类型的数据用快速排序法进行排序
对float类型的数据用插入排序法进行排序
template<typename T>
void sort(T arg[], int size) {
cout << "temp speclized use" << endl;
}
template<> //特化
void sort<int>(int arg[], int size) {
cout << "int specliazed template" << endl;
}
template<>
void sort<char>(char arg[], int size) {
cout << "char speclized template" << endl;
}
int main() {
int array_int[5] = { 1,2,3,4,5 };
int size = 5;
float array_float[5] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
char array_char[5] = { 1,2,3,4,5 };
sort<int>(array_int, size);
sort<float>(array_float, size);
sort<char>(array_char, size);
system("PAUSE");
return 0;
}
输出结果如下:
int specliazed template
temp speclized use
char speclized template
特化的基本格式如下:
// 一个通用的排序程序
template <class T>
void sort(T arr[], int size)
{
// 实现快速排序的代码
}
// 模板特化:指定char数据类型的函数
template <>
void sort<char>(char arr[], int size)
{
// 实现计数排序的代码
同时,模板特化对模板类也适用:
比如模板类中,要对int类型的类使用特定操作:
template<class T>
class specialUse {
public:
specialUse() {
cout << "general template use" << endl;
}
};
template<>
class specialUse<int> {
public:
specialUse() {
cout << "int template use" << endl;
}
};
使用如下:
specialUse<char> charUse;
specialUse<int> intUse;
输出结果如下:
general template use
int template use
模板特化的原理:
当编写了一个模板类或模板函数时,如果编译器碰到了一个新的数据类型或数据类型集合,则编译器会创建一个模板类或模板函数的拷贝
模板函数的特化会使编译器优先检验这个类型的模板函数或模板类