我想找到a <= b && b < c
可以重写为a <= b < c
的方法或宏,因为a <= b < c
似乎更直接,并且经常出现在用户需求定义中。此外,a <= b && b < c
需要输入b
两次。
我搜索了运算符,但似乎(我认为)只能为自定义类添加操作,但不能改变原始操作。另外我知道我可以重载bool operator >
但不确定我是否可以添加一个返回较大操作的新操作int operator >
。此外,即使运算符重载也有效,a <= b < c
将仅返回c,但不返回语句a <= b < c
的真或假(类似于MAX(c, MAX(b, a))
)。
是否有任何方法可以模拟a <= b < c <= ...
?
答案 0 :(得分:0)
评论已经注意到这是一个坏主意所以我不会重复这一点。
宏观上有点可能。这些运算符都不能是宏名称。但是,如果您允许BADIDEA(a<=b<c)
,则可以将其展开为HelperClass()*a<=b<c
。这个想法是Helperclass::operator*
具有最高的优先权。这意味着我们将其解析为HelperClass::operator*(HelperClass(), a)
。
第一部分返回另一个HelperClass
。 HelperClass
也会重载operator<=
,因此我们接下来会HelperClass::operator<=(firstExpr, b)
。
通过这种方式,我们可以构建一个传递给HelperClass
的参数列表。它甚至支持BADIDEA(a<b<c<d)
。最后,我们只需调用HelperClass::operator bool
,当且仅当参数列表已排序时才返回true
。
或者,您不需要构建参数列表,但可以立即评估它们。在HelperClass()*4<3
false
之前,<=7
已经评估为HelperClass()*4<3<=7