简化C++;值范围的多个条件的if-else 我有多个C++ if if条件来检查某个变量的范围和具有相同签名的调用函数,如 if (x < 100 ) { call_1(); } else if (x < 500 ) { call_2(); } else { call_3(); } if(xsecond()@raket1111,是的,你是对的。我已经更新了答案。谢谢

简化C++;值范围的多个条件的if-else 我有多个C++ if if条件来检查某个变量的范围和具有相同签名的调用函数,如 if (x < 100 ) { call_1(); } else if (x < 500 ) { call_2(); } else { call_3(); } if(xsecond()@raket1111,是的,你是对的。我已经更新了答案。谢谢,c++,if-statement,std,C++,If Statement,Std,是否有任何标准库或结构可用,以便我可以映射范围和功能,这些范围和功能可以通过不接触条件语句进行扩展。在这里没有这种“现成”的替代方案可以帮助您。你拥有它的方式是好的和清晰的,但是如果保持清晰,你可以随时寻找替代品。例如,如果x是或可能是无符号整数类型,并且您的间隔是100的倍数,则 switch (x / 100){ case 0: call_1(); break; case 1: case 2: case 3: case 4: call_2(); break;

是否有任何标准库或结构可用,以便我可以映射范围和功能,这些范围和功能可以通过不接触条件语句进行扩展。

在这里没有这种“现成”的替代方案可以帮助您。你拥有它的方式是好的和清晰的,但是如果保持清晰,你可以随时寻找替代品。例如,如果
x
是或可能是无符号整数类型,并且您的间隔是100的倍数,则

switch (x / 100){
case 0:
    call_1();
    break;
case 1: case 2: case 3: case 4:
    call_2();
    break;
default:
    call_3();
}

随着项目的扩展,其可读性可能会提高。

您可以使用
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(){}
无效调用_2(){}
无效调用_3(){}
std::映射函数={
{99,&call_1},
{499,&call_2},
{std::numeric_limits::max(),&call_3}
};
无效调用(int x)
{
函数的下界(x)->second();
}

您甚至不必取消对函数指针的引用:
functions.lower_bound(x)->second()@raket1111,是的,你是对的。我已经更新了答案。谢谢