重载运算符&& 和 ||创建保存动态逻辑的类
Overloading operator&& and || to create a class that saves dynamic logic
我有一个从enum创建的类,可以在将来的任何时候测试它是否通过,返回一个bool值,例如:
ConditionObject cnd(CondIsTuesday);
door.setOpenCondition(cnd);
那么门就有了一个条件,可以用来确定它的状态。
但是我现在希望重载&&并且这个条件类的运算符可以被链接在一起,并以正常布尔逻辑所期望的方式工作。例如,实现以下内容:
ConditionObject cnd(ConditionObject(CondIsTuesday) || (ConditionObject(CondIsThursday) && ConditionObject(CondIsAfterEight)));
door.openCondition(cnd);
现在门将在星期二或星期四八点后开。
我不确定描述这个问题的正确方法,这也使得如果已经存在解决方案,寻找解决方案变得困难。谢谢你对这个问题的任何帮助!
[编辑]我认为我解释得不够好,我不希望在创建对象时对ConditionObject求值,而是希望将整个逻辑存储到最终的ConditionObject中,以便可以惰性地求值。
使用上面的第二个例子,如果我在星期一创建了nd对象,并且没有给门另一个条件,它将在星期二打开,因为它所给的条件开始返回true。
"表达式模板"可能对您有用。这似乎是一个相当彻底的主题,但还有其他的。我对这个主题不太熟悉,但这应该是一个很好的谷歌点。
基本思想是你想要一个树,叶子是一个实际的条件,它们之间的分支是定义它们如何相互作用的操作符。表达式模板就是这个树,您可以重载操作符来构建这个树。
然后,当你真的想知道你的门是否需要打开时,你沿着树走,依次检查每个条件,直到你得到答案。短路计算[就像Tony提到的]应该是自然而然的,因为你最终会依赖于内置的操作符。
如果你重载&&还有操作员,他们不能像普通操作员那样工作。例如:
为正常&&运算符,如果左边被确定为false,右边不再被求值;但是一旦你超载了操作符,该操作符将像。=(A, B)一样被调用,因此A和B都被用作参数,它们都将被求值。
相关文章:
- 从C++中的数字输入动态创建矩阵
- 如何从QToolBox中动态创建的QLineEdit中获取文本
- 如何在C++中为堆栈动态创建结构?
- 如何使用类型级函数动态创建静态类型?
- 如何在动态创建的CMFCToolbar的工具提示中添加描述?
- 如何设置动态创建的CMFCToolbar的原始状态?
- 我可以动态创建新地图并作为函数参数传递吗?
- 如何在循环中动态创建变量(c++)
- 如何在C++中使用 new 运算符创建对动态创建的数组的引用?
- 在堆或堆栈上分配的动态创建的字符串 - C
- "动态创建的事件处理程序"复选框
- 在字符串数组中动态创建和存储数据
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 为动态创建的数组使用静态关键字有什么意义吗?
- 有没有办法基于文本文件动态创建对象?
- 从类 c++ 动态创建数组
- 如何在循环中动态创建类对象?
- 动态创建 std::vector 并将其传递给另一个函数的各种方法
- 使用 createComponent 动态创建 QML 对象