| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 946 人关注过本帖
标题:模板函数显式具体化的问题
取消只看楼主 加入收藏
LOV迪迪
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-7-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
模板函数显式具体化的问题
#include<iostream>
#include<cstring>
template<class T>
const T Maxn(const T arr[],int n);                        //模板函数
//
template<>const char* Maxn(const char* arr[],int n);       //模板函数显示具体化,此行报错
using namespace std;
int main()
{
int num[4]={1,2,3,4};
double dig[6]={1.1,2.2,3.3,4.4,5.5,6.6};
cout<<"The max of 4 int:"<<Maxn(num,4)<<endl<<endl;
cout<<"The max of 6 double:"<<Maxn(dig,6)<<endl<<endl;      //int,double数组来测试模板函数运行
char* pc[5]={
"nnnnnnnnnnnnn",
"nnn is a handsome and excellent boy!",
"wwwwwwwwwwwwwwww",
"sssssssssssss",
"swdefsfsdf"
};                                                          //创建指针数组。每个数组元素是指向一个字符串的指针
cout<<pc[1]<<endl<<endl<<endl;
cout<<"Your longest string is:\n"
<<Maxn(pc,5)<<endl;                                         //此处以指针数组名为参数,调用的应该是显示具体化的函数
return 0;
}
template<class T>
const T Maxn(const T arr[],int n)                          //模板函数体
{
T max=arr[0];
for (int i=1;i<n;i++)
if (max<arr[i])
max=arr[i];
return max;
}
template<>const char* Maxn(const char* pc[],int n)          //模板函数显示具体化,此行报错
{                                             
const char* pm=pc[0];
for (int i=1;i<n;i++)
if (strlen(pm)<strlen(pc[i]))
pm=pc[i];
return pm;
}
我是实在不知道自己错在哪里了,模板函数显示具体化,之前用着一直没事的啊,怎么这次我怎么看都不知道错在哪,程序编译无法通过,错误如下:
==============================================================
C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.8.6.cpp(6) : error C2912: explicit specialization; 'const char *__cdecl Maxn(const char *[],int)' is not a function template
        C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.8.6.cpp(6) : see declaration of 'Maxn'
C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.8.6.cpp(39) : error C2912: explicit specialization; 'const char *__cdecl Maxn(const char *[],int)' is not a function template
        C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.8.6.cpp(6) : see declaration of 'Maxn'
C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.8.6.cpp(39) : error C2912: explicit specialization; 'const char *__cdecl Maxn(const char *[],int)' is not a function template
        C:\Program Files\Microsoft Visual Studio\MyProjects\程序文本\8.8.6.cpp(6) : see declaration of 'Maxn'
=========================================================
总是在我的显示具体化函数那里报错,说他不是一个函数模板,什么意思啊
求高手赐教

[ 本帖最后由 LOV迪迪 于 2012-7-16 10:01 编辑 ]
搜索更多相关主题的帖子: include nnnnnnnnn max double 
2012-07-16 09:53
LOV迪迪
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 2楼 peach5460
你把我所有的函数显式具体化前缀template<>都改成了template<class T>,的确能编译通过了·····可是就失去了具体化的意义了,完全就是按照原模板函数在运行啊,运行结果输出最长字符串的那一项目输出的只是第一个字符串(这刚好是模板函数算法下的结果),但是用具体化的算法,返回的应该是最长的字符串
2012-07-20 11:28
快速回复:模板函数显式具体化的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022600 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved