#include <iostream>
#include <cstring>
using namespace std;
template<typename T>
T maxn(T arr[],int n);
template <> const char*maxn(const char *arr[],int n);
int main()
{
int arr1[6]={1,2,3,4,5,6};
cout<<maxn(arr1,6)<<endl;
double arr2[4]={1.1,2.1,3.1,4.1};
cout<<maxn(arr2,4)<<endl;
const char *arr3[5]={"asd","adfas","asdasdfgff","ad","asdv"};
cout<<maxn(arr3,5);
return 0;
}
template<typename T>
T maxn(T arr[],int n)
{
T max=0;
for(int i=0;i<n;i++)
{ if(arr[i]>max)
max=arr[i]; }
return max;
}
template <> const char*maxn(const char *arr[],int n)
{
unsigned int max=strlen(arr[0]);
const char *ps=arr[0];
for(int i=1;i<n;i++)
{
if(strlen(arr[i])>max)
{
ps=arr[i];
max=strlen(ps);
}
}
return ps;
}
typename T之后,参数里的T必须与返回类型的T相一致,不然会报错。
而且如果不适用const char型,会有warning,因为这里面的值应是不能修改的,如果不用const,会有被出错误的风险。