使用模板max函数比较类对象

时间:2010-11-11 21:20:36

标签: c++

我写了这样的模板函数:

template <class T>
const T& max1(const T& x, const T& y)
{
  if(y < x)
    return x;
  return y;
}

现在,我如何使用此函数来比较A类的两个对象,其中A类如下所示?


class A
{
public:
    A(int x){i=x;}

private:
friend bool operator<(A const& lhs, A const& rhs) { return lhs.i < rhs.i; }

int i;
int i;

我相信我必须超载&lt;运营商,但无法弄清楚整个过程是如何运作的?您是否也可以提供我可以阅读的文章的链接?

谢谢。

2 个答案:

答案 0 :(得分:3)

在这种情况下,定义一个重载的<运算符很简单:

bool operator<(A const& lhs, A const& rhs) {
    return lhs.i < rhs.i;
}

通常,定义重载运算符就像那样简单(尽管如果你想访问非公共成员,你需要在类的定义中friend函数。)

某些运算符重载(如[]()=)不能定义为自由函数,而必须是成员函数。这并不比定义自由函数重载运算符更难,但需要注意。

答案 1 :(得分:1)

专业化max

template <> const T& max1(const A& x, const A& y)
{
  if(y.i < x.i)
    return x;
  return y;
}