C++,在 class 变量中添加条件
C++, Adding conditions in class vars
标题可能不对,因为我找不到合适的词来形容它。
我想为某些 object 添加条件(由 class 创建的实例)。
在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...
}
}
假设条件是:
条件 = 值 1 > 值 2;
我想 'ADD' 条件中的条件,所以它变成了这样的东西:
conditions = (value1 > value2) || (value3 <= value4);
或
conditions = (value 1 > value2) && (value3 <= value4);
如果我问的有什么不对的地方,对不起!如果你知道答案以外的东西,但知道做同样事情的完全不同的东西,请不要犹豫,讨论它。
提前致谢!
我假设您知道为什么 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
是一个简单的布尔值的要求。
这是一个示例,说明如果您想重新评估病情可以采取的措施。
A class and-ing (resp. or-ing) 当前评估的布尔变量表示的条件其中 useCondition
被使用:
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
是指向可以重新计算的布尔变量的指针列表
您甚至可以通过定义一个完整的条件层次结构 classes 来实现 bool eval()
方法,例如两个变量之间的相等或不相等,并且可以通过 [=26= 组合] 和 or
。但对于 SO 的初始答案来说,它太复杂了。但是你可以尝试实现这个想法,卡住的时候在这里问更精确的问题...
标题可能不对,因为我找不到合适的词来形容它。 我想为某些 object 添加条件(由 class 创建的实例)。
在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...
}
}
假设条件是: 条件 = 值 1 > 值 2; 我想 'ADD' 条件中的条件,所以它变成了这样的东西:
conditions = (value1 > value2) || (value3 <= value4);
或
conditions = (value 1 > value2) && (value3 <= value4);
如果我问的有什么不对的地方,对不起!如果你知道答案以外的东西,但知道做同样事情的完全不同的东西,请不要犹豫,讨论它。
提前致谢!
我假设您知道为什么 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
是一个简单的布尔值的要求。
这是一个示例,说明如果您想重新评估病情可以采取的措施。
A class and-ing (resp. or-ing) 当前评估的布尔变量表示的条件其中 useCondition
被使用:
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
是指向可以重新计算的布尔变量的指针列表
您甚至可以通过定义一个完整的条件层次结构 classes 来实现 bool eval()
方法,例如两个变量之间的相等或不相等,并且可以通过 [=26= 组合] 和 or
。但对于 SO 的初始答案来说,它太复杂了。但是你可以尝试实现这个想法,卡住的时候在这里问更精确的问题...