Я хочу оценить экземпляр некоторого класса в логическом контексте. Или, чтобы быть более понятным, я хочу определить, как объект реагирует, если он используется непосредственно в логическом контексте.
Вот пример:
class Foo
{
int state;
Foo(): state(1) {}
bool checkState()
{
return (state >= 0);
}
void doWork()
{
/*blah with state*/
}
};
int main()
{
Foo obj;
//while(obj.checkState()) //this works perfectly, and thats what i indent to do!
while(obj) //this is what want to write
obj.doWork();
return 0;
}
Хорошо, просто приятно иметь :-), но возможно ли это вообще? Если да, то как?
Спасибо!
Используйте явный оператор преобразования для bool:
explicit operator bool() const { return (state >= 0); }
Это делает именно так что вы хотите: определить, что происходит, когда объект оценивается в логическом контексте.
Если у вас есть старый компилятор, вы не можете использовать explicit
и это плохо, потому что operator bool()
(без explicit
) может в конечном итоге использоваться не в булевых контекстах. В этом случае используйте безопасная идиома вместо.
Ты можешь использовать operator bool()
:
explicit operator bool() const
{
return (state >=0) ;
}
Как указано, вы хотите использовать explicit
чтобы это не использовалось в целочисленном контексте. Также главная должна вернуть int.