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习语.