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 替换为 andConditionorCondition :

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 的初始答案来说,它太复杂了。但是你可以尝试实现这个想法,卡住的时候在这里问更精确的问题...