如果我有一个这样的模板类和模板函数

template <class T> T getMax (T a, T b) {
  return (a>b?a:b);
}

template <class T> class GetMax {
public:
    static T getMax(T a, T b) {
        return (a>b?a:b);
    }
};


为什么这些无效?

x=getMax(1, '2');


但是这些是有效的

x=getMax(1,2);


这是否意味着模板函数中没有类型转换?

这是无效的

x=GetMax::getMax(1, 2);


这是否意味着必须为模板类指定类型?

最佳答案

getMax(1, '2');应该返回什么?一个整数还是一个字符?考虑一下:)

您可以这样写:

template <class T1, class T2> T1 getMax (T1 a, T2 b) {
  return (a>b?a:b);
}


但是请注意,您显式地返回类型1,在getMax('1',1000)这样的情况下,该值可能不起作用,因为100会被转换为char类型,并且大小还不够。

后者无效,因为要使用一个类,您必须首先声明它是什么类型-这种机制在类型推导之前首先起作用。

如果您声明,它将起作用:

class GetMax {
public:
    template <class T>
    static T getMax(T a, T b) {
        return (a>b?a:b);
    }
};

10-05 20:25