Можно ли так сравнивать объект класса?

215
06 мая 2018, 20:12
void f( MyClass obj ){
    if( obj ){
    }
}

В моменте if( obj ) хотелось бы чтобы вызывался какой-то перегруженный оператор, или ещё что. Реально ли сделать подобное?

Answer 1

Вкратце - если у вас есть оператор приведения к bool (или чего-то, что приводится к bool, и без неоднозначностей), то можно.

class Test {
public:
    Test(int x = 0):val_(x){ cout << "Test(" << x << ")\n"; }
    ~Test()           { cout << "~Test(" << val_ <<")\n"; }
    operator int() const { cout << "Test::operator int(" << val_ <<")\n"; return val_; }
    operator bool() const { cout << "Test::operator bool(" << val_ <<")\n"; return val_; }
private:
    int val_ = 0;
};

int main(int argc, const char * argv[])
{
    Test t(5);
    if (t)
    {
        cout << "true\n";
    }
}

Можете выкинуть оператор bool и посмотреть на результат.

READ ALSO
скобочная последовательность

скобочная последовательность

когда строка начинаеться ")" с этой скобкой выдает ошибку или с этой "}" что делать?

191
Задача C++. Задача про кирпчи

Задача C++. Задача про кирпчи

Задача не проходит один из тестов проверяющей системыВ чём ошибка?

209
Неправильное изменение SceneRect

Неправильное изменение SceneRect

Есть основной класс MainWindow, для находящегося внутри QGraphicsView установлен viewPort от GraphWidget, наследуемого от QGraphicsView класса:

177