是否有任何方法或宏来模拟语法"if(a <= b < c <= ...)"来替换"if(a<=b && b < c && c <= ...)"?
Is there any method or macro to simulate syntax "if(a <= b < c <= ...)" to replace "if(a<=b && b < c && c <= ...)"?
我想找到一个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 <= ...
吗?
评论已经指出这是一个坏主意,所以我不会重复。
宏在某种程度上是可能的。这些运算符都不能是宏名称。但是如果你允许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
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 呼叫运营商<<临时
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何删除peer if else分支中的冗长句子
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 我似乎对if/else的基本语句有问题:/
- <<操作员在下面的行中工作
- if数组上的随机数
- 将按位if条件转换为普通if条件
- If语句在c++中被忽略
- 比较if语句中的数组值和int值