【发布时间】:2016-06-12 21:53:24
【问题描述】:
我在互联网上找到了一段代码,它的目标非常简单,但它使用了一种丑陋的方法。据说,作者正在使用 switch case 来确定先前定义的 Enum 的一些(非连续)值是否属于它们的范围。如果是,该函数将返回true,仅此而已。否则返回false。
实际上是这样的:
switch(value) {
case ONE:
case TWO:
/* many similar lines later */
case TWENTY:
case TWENTY_FIVE:
/* an afternoon later */
case ONE_HUNDRED:
return true;
default:
return false;
}
由于编译器生成了一个跳转表,他们使用 switch case 是合理的(即使跳转表并不一定意味着从我收集的内容中即时查找)。即便如此,这还是会产生无数不必要的代码行。
我已阅读有关函数内联和使用函数指针数组的信息,但我不知道如何在这种特定情况下使用它。
我如何避免用这样一个简单的案例(没有双关语)写很多行case X:?
【问题讨论】:
-
过长的
switch和/或if语句通常表明 OOP 使用不当 -
@henrikgiesel,OOP 从何而来?
-
您的问题到底是什么?我不明白。
-
if (value > ONE && value < ONE_HUNDRED)? -
您希望通过使用函数指针数组获得什么?如果函数指针数组比开关快,编译器开发人员将开始使用函数指针实现开关......
标签: c++ switch-statement boilerplate jump-table