C++ 模板(3) 模板的特化

来源:互联网 发布:锁屏后能录像的软件 编辑:程序博客网 时间:2024/06/08 00:47

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


模板特化的原理:

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

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








原创粉丝点击