如何在布尔上下文中直接计算对象
How to evaluate an object directly in a boolean context?
我想在布尔上下文中计算某个类的实例。或者更清楚地说,我想定义对象在布尔上下文中直接使用时的反应。
下面是一个例子:
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。
相关文章:
- 如何在 c++ 中计算对象的哈希/校验和/指纹?
- OpenCV Otsu的阈值:计算多个Mat对象的单个阈值
- 是否有一种计算CGAL中Surface_mesh对象的PCA的方法
- 计算不同类的对象数量
- 通过查找重复顶点从 vec3 对象的向量计算索引
- OPENCV(C ) - 从已知的3D对象和相机位置计算图像的2D坐标
- 在Qt5的OpenGL绘图中通过鼠标移动计算对象旋转角度
- 如何计算指向不同矢量数组中特定对象的指针的出现次数
- 面向对象 成本计算C++不起作用
- 计算检测到的对象OPENCV
- 如何计算摄影机对象的视图矩阵
- 计算从类创建的对象数
- 在Qt中计算对象的序列化大小
- 根据对象的成员子对象之一的地址计算对象的地址
- 使用OpenCV计算对象的面积
- 在堆栈程序中实现一个计数器,用于计算对象移动的次数
- 如何计算对象的引文数?
- 最简单的计算对象实例的方法
- 如果对象必须以特定类型对齐,则计算对象的大小
- 如何在布尔上下文中直接计算对象