如何直接在布尔上下文中评估对象?

Phi*_*ski 4 c++ object boolean-expression

我想在布尔上下文中评估某个类的实例.或者更清楚一点,我想定义对象如果直接在布尔上下文中使用它会如何反应.
这是一个例子:

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;
}
Run Code Online (Sandbox Code Playgroud)

好吧,它只是一个很好的:-),但这有可能吗?如果有,怎么样?

谢谢!

R. *_*des 11

使用显式转换运算符来布尔:

explicit operator bool() const { return (state >= 0); }
Run Code Online (Sandbox Code Playgroud)

完全符合您的要求:定义在布尔上下文中计算对象时会发生什么.

如果你有一个较旧的编译器,你不能使用explicit,这是不好的,因为operator bool()(没有explicit)最终可能会在非布尔上下文中不必要地使用.在这种情况下,请使用安全bool习语.