bluishglc 2005年08月19日
一个函数模板显示特化的问题,请高手指教!
这是一个关于函数模板显示特化的程序,程序如下:

//////////////////////////////////////////////////////////
//
//一个运用模板对各种数据类型进行排序的程序
//
//////////////////////////////////////////////////////////

#include <iostream>
using namespace std;

//模板函数声明
template<class Type,int size>
void sort(Type (&array)[size]);
//特化版本的模板函数声明
template<>
void sort<char*>(char* (&array)[size]);

//主程序
main()
{
int i;
//用于测试模板函数
int iarray[10]={3,6,7,6,9,21,43,12,45,31};
double darray[8]={23.8,34.8,32.8,12.7,67.2,31.9,88.4,39.7};
//用于测试模板函数的特化版本
char *parray[6]={"wofjeoif","oyfiije","fwof","hwofj","lks","isf"};

cout<<"Before sort:"<<endl;
for(i=0;i<10;i++)
{
cout<<iarray[i]<<" ";
}
cout<<"\nAfter sort:"<<endl;
sort(iarray);
for(i=0;i<10;i++)
{
cout<<iarray[i]<<" ";
}

cout<<"\nBefore sort:"<<endl;
for(i=0;i<8;i++)
{
cout<<darray[i]<<" ";
}
cout<<"\nAfter sort:"<<endl;
sort(darray);
for(i=0;i<8;i++)
{
cout<<darray[i]<<" ";
}
cout<<"\nBefore sort:"<<endl;
for(i=0;i<6;i++)
{
cout<<"["<<parray[i]<<"]"<<" ";
}
cout<<"\nAfter sort:"<<endl;
sort(parray);
for(i=0;i<6;i++)
{
cout<<"["<<parray[i]<<"]"<<" ";
}
cout<<endl;

}
//模板定义
template <class Type,int size>
void sort(Type (&array)[size])
{
Type temp;
int i,j;
for(i=0;i<size-1;i++)
for(j=i+1;j<size;j++)
if(array[i]>array[j])
{
temp=array[i];array[i]=array[j];array[j]=temp;
}
}
//特化版本的定义
template<>
void sort<char*>(char* (&array)[size])
{
char* temp;
int i,j;
for(i=0;i<size;i++)
for(j=i+1;j<size;j++)
if(strcmp(array[i],array[j])>0)
{
temp=array[i];array[i]=array[j];array[j]=temp;
}
}

问题出在特化版本的非类型实参上。该程序在vc.net 2003上编译时显示:
“size”: 即使使用参数相关的查找,也未找到标识符
当把特化版本去除,只对iarray和darray排序是没有问题的,可以直接通过,但是一但加入对parray
进行排序的特化版本时,就出现上述问题,这是为什么?为什么在特化版本里size的值就不能通过传递的数组引用而确定下来呢?
望高手指点,小弟将不盛感激!
...全文
105 点赞 收藏 8
写回复
8 条回复

还没有回复,快来抢沙发~

发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告