如何在布尔上下文中直接计算对象

How to evaluate an object directly in a boolean context?

本文关键字:计算 对象 上下文 布尔      更新时间:2023-10-16

我想在布尔上下文中计算某个类的实例。或者更清楚地说,我想定义对象在布尔上下文中直接使用时的反应。
下面是一个例子:

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)可能会在非布尔上下文中被不必要地使用。在这种情况下,请使用安全的bool方式。

您可以使用operator bool():

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

如前所述,您希望使用explicit来防止在整数上下文中使用此操作。另外,main应该返回一个int。