4

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

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;
}

好的,很高兴拥有:-),但这有可能吗?如果是,如何?

谢谢!

4

2 回答 2

13

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

explicit operator bool() const { return (state >= 0); }

正是您想要的:定义在布尔上下文中评估对象时会发生什么。

如果您有一个较旧的编译器,则不能使用explicit,这很糟糕,因为operator bool()(没有explicit)最终可能会在非布尔上下文中不受欢迎地使用。在这种情况下,请改用安全的 bool 习惯用法

于 2013-03-22T14:35:18.687 回答
2

您可以使用operator bool()

explicit operator bool() const
{
    return (state >=0) ;
}

正如所指出的,您想使用它explicit来防止在整数上下文中使用它。main也应该返回一个 int

于 2013-03-22T14:36:46.617 回答