我有多个C ++ if else条件用于检查某个变量的范围和调用函数具有相同的签名,如
if (x < 100 )
{
call_1();
}
else if (x < 500 )
{
call_2();
}
else
{
call_3();
}
是否有可用的标准库或结构,以便我可以映射范围和功能,可以扩展而无需触及条件语句。?
答案 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();
}
随着项目的扩展,最终可能会更具可读性。