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


模板特化的原理:

当编写了一个模板类或模板函数时,如果编译器碰到了一个新的数据类型或数据类型集合,则编译器会创建一个模板类或模板函数的拷贝

模板函数的特化会使编译器优先检验这个类型的模板函数或模板类