题目意思是:
建立一个通用的函数模板,由一个T类型元素数组,和一个该数组元素个数的整数来作为两个参数,然后返回这个数组中最大的元素。
在使用时,用一个6个元素的int数组和4个元素的double数组来调用该模板。代码执行到这里都没问题。
但是题目还要求定义一个具体化,将char指针数组和这个指针数组中的指针数量作为参数,返回该数组中指向的字符串中最长的那一个的指针(对应字符串的地址)。使用5个字符串指针组成的数组进行测试。
我的运行结果就是,无论怎么改字符串,最后返回的总是数组中最后一个字符串的地址。之后我在具体化函数定义里加了一些标记,然后执行发现这些标记根本不显示,就是说函数重载模板都是载入的通用模板而不是具体化模板,但我不知道怎么解决这个问题。
编译器是Dev-C++ 5.11
代码如下:
#include<iostream>
using namespace std;
#include<cstring>
template<typename T>
T maxn(const T * t,int size);
template <char *> char* maxn(const char* t[], int size);
int main(void){
int tt[6]={5,48,92,107,25,66};
double td[4]={44.5,97.8475,54.6,81.1};
const char *tp[] = {"Good Game","Happy life","Lt.Jonason","little one","Why so serious?"};
cout << "tt.max = " << maxn(tt,6) << endl;
cout << "td.max = " << maxn(td,4) << endl;
const char *maxc = maxn(tp,5);
cout << "tp.max = " << maxc << endl;
return 0;
}
template<typename T>
T maxn(const T * t,int size){
T max = t[0];
for(int i = 1;i < size; i++)
if(*(t+i)>max)
max = *(t + i);
return max;
}
template <char *> char* maxn(const char* t[], int size){
char* max = t[0];
for(int i = 1 ; i < size ;i++){
if(strlen(max) < strlen(t[i])){
cout << endl << max << " " << t[i] << endl;
strcpy(max,t[i]);
}
}
return max;
}