函数模板 显示具体化
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://298452.blog.51cto.com/288452/55885 |
#include <iostream> #include <string> using namespace std; const int NUMINT=6; const int NUMDOUBLE=4; const int NUMPOINT=5; template <class T> //模板函数原型
T maxn(T* array,int n); template <class T> T maxLength(T* array,int n); //模板函数原型 template <> string maxLength<string>(string ch[],int n) //模板函数显示具体化,首先用template <>打头用以表明是
//显示具体化,其中的函数名应该为上面已经声明和定义
//(在后面)了的模板函数的函数名,如maxLength,并在
//该函数名后面的<>内写明要显示化的类型,如string。
{ string str; str=ch[0]; for(int i=1;i<n;i++) { if(str.length()<ch[i].length()) //计算字符串的长度用句点 //法调用相对应的函数,如str.length()
str=ch[i]; //字符串之间可以用已经重载了的=进行直接赋值 } return str; //返回字符串
} void main()
{ int arrayInt[NUMINT]={1,2,3,4,5,6};
double arrayDouble[NUMDOUBLE]={1.1,2.2,3.3,4.4}; int a; double b; cout<<"arrayInt: "<<endl; for(int i=0;i<NUMINT;i++) { cout<<arrayInt[i]<<" "; } cout<<endl; cout<<"arrayDouble: "<<endl; for(i=0;i<NUMDOUBLE;i++) { cout<<arrayDouble[i]<<" "; } cout<<endl; a=maxn(arrayInt,NUMINT); //调用模板函数 b=maxn(arrayDouble,NUMDOUBLE); //调用模板函数 cout<<"a="<<a<<" "<<"b="<<b<<endl; //定义字符串数组
string arrayString[NUMPOINT]={"abc","defgh","dfadfasdfaa","dfas","aaaaaaaa"}; for(int k=0;k<NUMPOINT;k++) { cout<<"ROW"<<k+1<<" : "<<arrayString[k]<<endl; } //用二维字符数组来存储字符串,效果等价于字符串数组,
//但尽可能地避免同时使用字符串数组和二维字符数组
char myc[6][6]={"abc","123","456","78910","1112"}; for(int j=0;j<6;j++) { cout<<"row"<<j+1<<": "<<myc[j]<<endl; } //输出利用函数模板显示具体化后返回的字符串地址,即
//在返回的字符串前面加上去地址符号&即可
cout<<&maxLength(arrayString,NUMPOINT)<<endl; } template <class T> //求数组中最大值的模板函数 T maxn(T* array,int n) { T temp; temp=array[0]; for(int i=1;i<n;i++) { if(temp<array[i]) temp=array[i]; } return temp; } 如果需要同一种算法用于不同类型的函数,请用模板,它虽然不能缩短可执行程序,但它使生成多个函数定义更简单、更可靠。
具体化将覆盖常规模板,而非模板函数将覆盖具体化和常规模板。 本文出自 “lion_pc” 博客,请务必保留此出处http://298452.blog.51cto.com/288452/55885 本文出自 51CTO.COM技术博客 |


lion-pc
博客统计信息
热门文章
最新评论
友情链接