2012-03-18 3 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 
}; 

The operator() имеет иную цель, это позволяет использовать класс как «функция», и это не тот случай

+0

Любая конкретная причина, мы типаж к ссылке? – Lazer

+1

'type operator() const' следует записывать как' operator type() const' – Nawaz

+1

Или 'type operator()() const', если это оператор вызова функции, не принимающий никаких параметров. –

Смежные вопросы