这个operator()语法有什么作用?

时间:2012-03-18 09:07:00

标签: c++ templates

在这段代码中取自http://drdobbs.com/cpp/184403774

template <class L, class R>
class MinResult {
    L& lhs_;
    R& rhs_;
public:
    operator L&() { return lhs_ < rhs_ ? lhs_ : rhs_; }   // <----
    operator R&() { return lhs_ < rhs_ ? lhs_ : rhs_; }   // <----
    MinResult(L& lhs, R& rhs) : lhs_(lhs), rhs_(rhs) {}
};

以上代码在箭头指向的行上尝试的是什么?

我是C ++的初学者,我知道我们可以通过定义来覆盖/定义operator()

但是不应该像这样定义

L& operator() { return lhs_ < rhs_ ? lhs_ : rhs_; }

我确信这是一些不同的语法,因为operator()应该是一个单词。此外,您无法使用不同的返回类型定义其中两个。

1 个答案:

答案 0 :(得分:7)

这不是类型转换操作符。

您可以定义

operator type() const

作为允许转换为type的运算符。例如

class date {
public:
   operator time_t() const; // convert to time_t
};

operator()有不同的目的,它允许将该类用作“函数”,而这不是这里的情况