simpliyfy C ++ if else for values for values of values

时间:2017-09-08 16:06:05

标签: c++ if-statement std

我有多个C ++ if else条件用于检查某个变量的范围和调用函数具有相同的签名,如

    if (x < 100 )
{
 call_1();
}
else if (x < 500 )
{
call_2();
}
else 
{
call_3();
}

是否有可用的标准库或结构,以便我可以映射范围和功能,可以扩展而无需触及条件语句。?

2 个答案:

答案 0 :(得分:8)

您可以使用std::map存储指向函数的指针。然后,您可以使用std::map::lower_bound()来查找正确的函数。

这是一个小例子:

#include <map>
#include <limits>

void call_1() {}
void call_2() {}
void call_3() {}

std::map<int, void(*)()> functions = {
    { 99, &call_1 },
    { 499, &call_2 },
    { std::numeric_limits<int>::max(), &call_3 }
};

void call(int x)
{
    functions.lower_bound(x)->second();
}

答案 1 :(得分:0)

没有这样的“现成”替代品可以帮助你。你拥有它的方式很好而且清晰,但如果保持清晰,你总是可以寻找替代方案。例如,如果x是或可能是无符号整数类型,并且您的间隔倍数为100,那么

switch (x / 100){
case 0:
    call_1();
    break;
case 1: case 2: case 3: case 4:
    call_2();
    break;
default:
    call_3();
}
随着项目的扩展,

最终可能会更具可读性。