函数模板做函数参数
template <typename T1,typename T2>
int mysort(T1 *array,T2 size)
{
T1 tmp;
if(array==NULL)
{
return -1;
}
for(int i=0;i<size;i++)
{
for(int j=i+1;j<size;j++)
{
if(array[i]>array[j])
{
tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
}
return 0;
}
template <typename T>
void play(T *array,int size)
{
for(int i=0;i<size;i++)
{
cout<<array[i]<<" ";
}
cout<<" "<<endl;
int main()
{
int array[]={11,23,21,10,9};
int size=sizeof(array)/sizeof(*array);
play<int> (array,size);
mysort<int,int> (array,size);
play<int> (array,size);
char str[]="sadadasda009dasd";
int size1=strlen(str);
play<char> (str,size1);
mysort<char,int> (str,size1);
play<char> (str,size1);
}
PS:
模板函数每次调用时,得标明是什么类型的模板函数。
函数模板和普通函数区别结论:
1)函数模板不允许自动类型转化
2)普通函数能够进行自动类型转换
函数模板和普通函数在一起,调用规则:
1)函数模板可以像普通函数一样被重载
2)C++编译器优先考虑普通函数
3)如果函数模板可以产生一个更好的匹配,那么选择模板
4)可以通过空模板实参列表的语法限定编译器只通过模板匹配