我写了这样的模板函数:
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;运营商,但无法弄清楚整个过程是如何运作的?您是否也可以提供我可以阅读的文章的链接?
谢谢。
答案 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;
}