2012-03-18 102 views
4

在这段代码从http://drdobbs.com/cpp/184403774采取:这个operator()语法做了什么?

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_; } 

我相信这是一些differenct语法,因为operator()应该是一个词来定义。另外,你不能用不同的返回类型定义它们中的两个。

回答

7

不是这是类型转换操作符。

您可以定义

operator type() const 

与操作员,允许投给type。例如

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

operator()都有不同的目的,它允许使用类的“功能”,这是不是在这里

+0

的情况下任何特别的原因,我们将强制转换为参考? – Lazer 2012-03-18 09:25:40

+1

如果函数调用操作符不带参数,则应将'type operator()const'写为'operator()const' – Nawaz 2012-03-18 09:44:18

+1

或'type operator()()const'。 – 2012-03-18 09:49:15