是否有任何方法或宏来模拟语法“if(a< = b< c< = ...)”来替换“if(a< =& b& b< c&& c < = ...)“?

时间:2015-06-10 06:06:05

标签: c++ syntax

我想找到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 <= ...

1 个答案:

答案 0 :(得分:0)

评论已经注意到这是一个坏主意所以我不会重复这一点。

宏观上有点可能。这些运算符都不能是宏名称。但是,如果您允许BADIDEA(a<=b<c),则可以将其展开为HelperClass()*a<=b<c。这个想法是Helperclass::operator*具有最高的优先权。这意味着我们将其解析为HelperClass::operator*(HelperClass(), a)

第一部分返回另一个HelperClassHelperClass也会重载operator<=,因此我们接下来会HelperClass::operator<=(firstExpr, b)

通过这种方式,我们可以构建一个传递给HelperClass的参数列表。它甚至支持BADIDEA(a<b<c<d)。最后,我们只需调用HelperClass::operator bool,当且仅当参数列表已排序时才返回true

或者,您不需要构建参数列表,但可以立即评估它们。在HelperClass()*4<3

中看到false之前,<=7已经评估为HelperClass()*4<3<=7