C++,在类变量中添加条件

C++, Adding conditions in class vars

本文关键字:添加 条件 类变量 C++      更新时间:2023-10-16

标题可能不对,因为我找不到合适的词。我想向某个对象(由类创建的实例)添加条件。

在 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;我想在条件中"添加"一个条件,以便它变成这样的东西:

    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是一个简单的布尔值的要求。

以下是如果您想重新评估条件可以执行的一个例子。

一个类和-ing(或-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是指向布尔变量的指针列表,可以重新计算

通过定义实现bool eval()方法的条件类的完整层次结构,例如 2 个变量之间的相等或不相等,以及可按 andor 组合,您甚至可以更加通用。但是对于SO的初始答案来说,这太复杂了。但是您可以尝试实现这个想法,并在卡住时在此处提出更精确的问题......