Что делает этот синтаксис operator ()? - PullRequest
4 голосов
/ 18 марта 2012

В этом куске кода взято из 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 Ответ

7 голосов
/ 18 марта 2012

Нет, это оператор приведения типа.

Вы можете определить

operator type() const

как оператор, который позволяет привести к type.Например,

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...