То, что вы пытаетесь сделать, - это контекстное преобразование, и в таких случаях ваш оператор преобразования должен быть правильно сформирован. Этот конкретный c сценарий подробно описан на cppreference.com в разделе «Неявные преобразования» в разделе «Контекстные преобразования».
Фактически, для сценария, упомянутого выше, все, что вам нужно чтобы сделать, это сделать ваши операторы преобразования const
.
Для меня работает ниже:
class Menu
{
int choice;
int mtitle;
public:
Menu(int a, int b):choice(a), mtitle(b){}
operator bool() const {
cout << "Calling op bool\n";
bool empty = false;
if (mtitle == 1) {
empty = true;
}
return empty;
}
operator int() const
{
cout << "Calling op int"<<"\n";
int choice = 2;
return choice;
}
};
int main()
{
Menu mymenu(12, 3);
if (mymenu)
cout << "valid\n";
}
В качестве альтернативы, если вы не хотите вносить какие-либо изменения в свой код, то в вашем main()
вы можете явно вызвать оператор, например:
if (mymenu.operator bool())
cout << "Op Bool is called";