注册 登录
编程论坛 C++教室

模板具体化问题

zzt_428 发布于 2008-12-02 10:09, 681 次点击
各位,小弟写了个简单的程序,请指点一下究竟错在哪里了 功能是返回最大的数值,或则字符串地址
#include <iostream>
using namespace std;

template <class T>
T maxn(T arr[], int n);

template<>char * maxn(char *arr[], int n); //模板具体化 对吗?

int main()
{
    int array[6]={9,7,6,1,5,4};
    double arrDou[4]={9.15,6.35,7.25,6.23};
    
    char *arrayc[]=
    {
        "I'm ok.",
        "I feel good.",
        "I feel so good.",
    };
    
    cout << maxn(array, 6) << endl;
    cout << maxn(arrDou, 4) << endl;
    cout << maxn(arrayc, 3) << endl;
    return 0;
}

template <class T>
T maxn(T arr[], int n)
{
    T max=*arr;
    for(int i=0; i<n; i++)
    {
        if(*(arr+i) > max)
            max=*(arr+i);
    }
    return max;
}


template<>char * maxn(char *arr[], int n)
{
    char *max=*arr;
    for(int i=0; i<n; i++)
    {
        if(strlen(reinterpret_cast(*arr+i)) > strlen(*max)) //这里比较字符串长短该怎么比较?
            max=*(arr+i);
    }
    return max;
}
4 回复
#2
newyj2008-12-02 10:46
程序代码:
#include <iostream>
using namespace std;

template <class T>
T maxn(T arr[], int n);

template<>char * maxn(char *arr[], int n); //模板具体化 对吗?

int main()
{
    int array[6]={9,7,6,1,5,4};
    double arrDou[4]={9.15,6.35,7.25,6.23};
   
    char *arrayc[]=
    {
        "I'm ok.",
        "I feel good.",
        "I feel so good.",
    };
   
    cout << maxn(array, 6) << endl;
    cout << maxn(arrDou, 4) << endl;
    cout << maxn(arrayc, 3) << endl;
    getchar();
    return 0;
}

template <class T>
T maxn(T arr[], int n)
{
    T max=*arr;
    for(int i=0; i<n; i++)
    {
        if(*(arr+i) > max)
            max=*(arr+i);
    }
    return max;
}


template<>char * maxn(char *arr[], int n)
{
    char *max=*arr;
    for(int i=0; i<n; i++)
    {
        if(strlen(arr[i]) > strlen(max)) //这里比较字符串长短该怎么比较?
            max=*(arr+i);
    }
    return max;
}
#3
zzt_4282008-12-02 15:59
回复
看来我还是对指针不太熟啊!多谢楼上的~~~~~~~
#4
asd67918682008-12-02 20:41
char* Max(char **arr,const int n); 这样定义 和
template<>char * maxn(char *arr[], int n);定义有什么区别没????
我指的区别是不加template<>与加template<>
#5
sunkaidong2008-12-03 09:46
模板具体化...你没看见T maxn(T arr[], int n);

template<>char * maxn(char *arr[], int n); 这个吗?
1