标题可能不对,因为我找不到合适的单词。 我想为某个对象添加条件(由类创建的实例)。
在obj.h中:(不包括预处理器命令)
class obj {
public:
void addCondition( bool cond );
void useCondition();
private:
bool conditions;
};
在obj.cpp中:(不包括预处理器命令)
void obj::addCondition( bool cond )
{
//What to write here, is the question in short!!!
}
void obj::useCondition()
{
if(conditions)
{
//Do something...
}
}
假设条件是: conditions = value1>值2; 我想在条件中“添加”一个条件,它就变成了这样的东西:
conditions = (value1 > value2) || (value3 <= value4);
OR
conditions = (value 1 > value2) && (value3 <= value4);
如果我在问事情上说错了,我很抱歉!如果你知道的不是答案,而是完全不同的事情做同样的事情,不要犹豫,讨论它。
提前致谢!
答案 0 :(得分:2)
我假设您知道为什么conditions
字段和condition
参数都是简单的布尔变量。如果这是真的,那可能非常简单,但您应该将addCondition
替换为andCondition
和orCondition
:
void obj::andCondition( bool cond )
{
conditions = conditions && condition;
}
void obj::orCondition( bool cond )
{
conditions = conditions || condition;
}
您应该定义条件是初始为真还是假。您始终可以将其设置为已定义的值,因为上面的代码为:
obj.andCondition(false);
将conditions
设为false,
obj.orCondition(true);
将conditions
设为true
根据评论编辑:
上述答案基于conditions
是一个简单的布尔变量的要求,而condition
是一个简单的布尔值。
以下是您想要重新评估条件时可以采取的措施的一个示例。
在使用useCondition
时评估的布尔变量表示的类和 - (resp。或者)条件:
class andcond {
std::list<bool *> conditions;
public:
void addCondition(bool &condition) {
conditions.push_back(&condition);
}
bool isCondition();
};
bool andcond::isCondition() {
bool retval = true;
for (std::list<bool *>::iterator it = conditions.begin(); it != conditions.end(); it++) {
retval = retval && **it;
}
return retval;
}
int main() {
bool a=false, b=true;
andcond c;
c.addCondition(a);
c.addCondition(b);
std::cout << c.isCondition() << std::endl; // is false here
a = true;
std::cout << c.isCondition() << std::endl; // is true here
return 0;
}
注意:conditions
是一个可以重新评估的布尔变量指针列表
通过定义实现bool eval()
方法的条件类的完整层次结构,您甚至可以更加通用,例如2个变量之间的相等或不等式,以及and
和or
之间的组合。但是对于对SO的初步答案的违规行为来说,这太复杂了。但你可以尝试实现这个想法,并在卡住时提出更准确的问题...