有没有办法在处理范围的 C++ 中编写 switch 语句。 案例 0-10 做一个, 案例 20-40 做 b, 案例 40-80 做 c, 等等 我可以使用一堆 if else if 语句来写出来,但想知道是否有更有效的方法。
最佳答案
实际上,您可以通过 C 中的预处理器滥用来做到这一点(尽管在 C++ 中可能不会,因为 C++ 中的 P99 存在一些错误,我相信只要有足够的毅力就可以克服这些错误)。
请参阅以下示例,使用 P99 :
#include "p99.h"
#define P99_SWITCH_RANGE(from, to) P99_FOR(from, P99_MINUS(to, from), P99_SWITCH_RANGE_GLUE_HELPER, P99_SWITCH_RANGE_CASE_LABEL_MAKER_HELPER)
#define P99_SWITCH_RANGE_GLUE_HELPER(from, i, past, cur) past: cur
#define P99_SWITCH_RANGE_CASE_LABEL_MAKER_HELPER(from, x, i) case P99_ADD(from, i)
int main(int argc, const char *argv[]) {
int x;
scanf("%i", &x);
switch (x) {
P99_SWITCH_RANGE(20, 30):
{
puts("between 20 and 30");
}
default: {
puts("not between 20 and 30");
}
}
}
请注意,此示例是左包容右排他的。我相信您可以修改宏以按照您喜欢的方式进行设置,因此这至少是一个不错的起点。
关于c++ - 范围的切换语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081089/