特化得作用:
函数模板有时候不能适用于所有的数据类型(比如字符串的比较char *数据类型),由此需要进行特化处理,把不适用的部分单独拿出来携程一个函数。
什么是全特化?
全特化模板头是 template<>,模板形参没有任何参数,
编译器执行程序时,如果存在多个重载关系的模板。匹配的规则是先匹配特殊画的模板,如果没有匹配成功,在匹配通用的模板。 全特化的模板参数是空的,意味着全部模板形参类型在模板体中指定,了类似于普通的函数,但只有在程序中实例化后才能生成具体的代码。
什么是篇特化?
片特化的意思是模板的部分形式确定了下来 比如:
template<typenameT,unsigned int N>
例子:
#include<iostream>
using namespace std;
template <typenameT>
bool compare(T &v1,T &v2, bool flag)
{
return((v1 < v2) ^ flag);
}
template<>
bool compare(char*&p1, char* &p2, bool flag)
{
return(strcmp(p1, p2) < 0) ^ flag;
}// 全特化, 实现对char *数组的处理
template < typenameT, int N, bool flag >
void sort(T a[])
{
for(int i = 0; i < N - 1; i++)
for(int j = N - 1; j > i; j--)
{
if(compare<T>(a[j] , a[j - 1], flag))
{
Ttemp = a[j];
a[j]= a[j - 1];
a[j -1] = temp;
}
}
}
template<typename T,int N>
void show(T a[])
{
for(int i = 0; i < N; i++)
{
cout<< a[i] << " ";
}
cout<< endl;
}
template<typename T,int N>
void sort_data(T a[])
{
cout<< "=================" << endl;
cout<< "old data:";
show<T,N>(a);
cout<< "Asc data:";
sort<T,N, false>(a);
show<T,N>(a);
cout<< "Desc data:";
sort<T,N, true>(a);
show<T,N>(a);
cout<< "=================" << endl;
}
int main()
{
inta[] = { 1, 2, 3, 4, 5, 8, 2, 4, 56, 8 };
charc[] = "hello world";
char*sp[] = { "hello", "thank you ", "i am ok","hehe" };
sort_data<int,sizeof(a)/sizeof(a[0])>(a);
sort_data<char,sizeof(c) / sizeof(c[0])-1>(c);
sort_data<char*, sizeof(sp) / sizeof(sp[0])>(sp);
system("pause");
return0;
}