2012-03-18 95 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