#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
template<class T>
T maxn(T* a,int n);
template<> void maxn(const char* s[],int n);
int main()
{
// int n6[6]{21,56,89,49,258,41};
// double n4[4]{2.1,5.6,8.9,4.9};
// auto m=maxn(n6,6);
// auto n=maxn(n4,4);
// cout<<m<<endl;
// cout<<n<<endl;
const char* words[3]={"one","two","three"};
// maxn(words,3);
return 0;
}
template<> void maxn(const char* s[],int n)
{
cout<<"ok";
}
template<class T>
T maxn(T* a,int n)
{
T max=a[0];
for (int i=1;i<n;i++)
{
if (a[i]>max)
{
max=a[i];
}
}
return max;
}
我想写一个maxn()
的显式特殊化,它传递一个char*[]
数组作为参数,但当我甚至没有调用函数时,它报告以下错误:
[错误] template-id 'maxn<>' for 'void maxn(const char**,int)'不匹配任何模板声明
[注]候选人为:'template T maxn(T*,int)'
2条答案
按热度按时间kognpnkq1#
特殊化必须接受
T*
并返回T
。您的特化返回void
,这是不正确的。返回
T
如下:或者像这样定义主模板:
hgb9j2n62#
由于我们可以用普通的非模板函数重载函数模板,因此***不需要为函数模板提供显式的特殊化***,如下所示。
看看你的代码(特别是显式专门化中的返回类型和参数类型),似乎这就是你要找的。
Working demo