实在是找不出来模板具体化函数错在那里。请高手指点一下?多谢
可以直接build下列源代码。
#include <iostream>
#include <cstring>
using namespace std;
template <typename T>
T maxn(const T arr[],int n);
template <> char * maxn<char *>(const char * ch[],int n);
int main()
{
int iarr[6]={101,202,105,403,650,330};
long larr[4]={11L,22L,33L,23L};
cout<<maxn(iarr,6)<<endl;
cout<<maxn(larr,4)<<endl;
char * ch[5]={"qaz","wsxe","qwer","rt","rtfx"};
cout<<maxn(ch,5);
return 0;
}
template <typename T>
T maxn(const T arr[],int n)
{
T tmp=arr[0];
for (int i=1;i<n;i++)
if (tmp<arr[i])
tmp=arr[i];
return tmp;
}
template <> char * maxn<char *>(const char * ch[],int n)
{
int ilenmax=strlen(*ch[0]),ilen;
char * pch= ch[0];
for (int i=1;i<n;i++)
{
ilen = strlen(*ch[i]);
if (ilenmax<ilen)
{
ilenmax=ilen;
pch = ch[i];
}
}
return pch;
}
[解决办法]
函数template < > char * maxn <char * >(const char * ch[],int n) 改为template < > char * maxn <char * >(char * const ch[],int n)
另外,函数实现中,
int ilenmax=strlen(*ch[0])改为int ilenmax=strlen(ch[0]);
ilen = strlen(*ch[i]); 改为ilen = strlen(ch[i]);
[解决办法]
const的问题,注意const在*号的左边和右边代表的意义不一样的