ifelse 与地图? [C++]
ifelse Vs Map? [C++]
- 我有一个 class 从其他 classes 接收
key
和 value
参数。
key
和value
都是std::string
。
- 现在函数
setParameter
使用链式 if-else if -else if - else 逻辑:
void setParamater(std::string key, std::string value){
if(key == KEYPARAM_1)
{
//Do something
}
else if(key == KEYPARAM_2)
{
//Do something
}
else if (key == KEYPARAM_3)
{
//Do something
}
else if (key == KEYPARAM_4)
{
//Do something
}
else if (key == KEYPARAM_5)
{
//Do something
}
else if (key == KEYPARAM_6) {
//Do something
}
else
{
//Do something
}
}
我觉得这很丑陋,它的代码进行了很多不必要的比较(参数越多,比较越多)。
我想做一个 map
字符串和函数:std::map<std::string; std::funtion<std::string>>
来替换这段代码。
第一个 std::string
将是关键,std::function
将替换 //Do something
行中的代码,另一个 std::string
将是值。
此解决方案的负面影响是我将为每个 key
创建一个对象,并且我必须找到一个声明所有函数的好地方。好处是它很容易调用,不会做所有的 ifelse 比较。像这样的东西会很漂亮:
void setParamater(std::string key, std::string value){
my_map(key, f(value)); //I'm not sure about the syntax in there
}
- 有人有更好的主意来替换 if-else 链吗?
map
是个好主意吗?
-仅供参考:每个案例都做了一些完全不同的事情,而不仅仅是二传手。
谢谢!
您不需要为 std::function
声明函数。另一种方法是使用 lambda。该 lambda 可以直接进入您的地图初始化。
看起来像
std::map<std::string, std::function<void(std::string)> funcs {
std::make_pair(KEYPARAM_1, [](std::string s) { std::cout << s; },
std::make_pair(KEYPARAM_2, [](std::string s) { /* something else */ }
}
- 我有一个 class 从其他 classes 接收
key
和value
参数。 key
和value
都是std::string
。- 现在函数
setParameter
使用链式 if-else if -else if - else 逻辑:
void setParamater(std::string key, std::string value){
if(key == KEYPARAM_1)
{
//Do something
}
else if(key == KEYPARAM_2)
{
//Do something
}
else if (key == KEYPARAM_3)
{
//Do something
}
else if (key == KEYPARAM_4)
{
//Do something
}
else if (key == KEYPARAM_5)
{
//Do something
}
else if (key == KEYPARAM_6) {
//Do something
}
else
{
//Do something
}
}
我觉得这很丑陋,它的代码进行了很多不必要的比较(参数越多,比较越多)。
我想做一个
map
字符串和函数:std::map<std::string; std::funtion<std::string>>
来替换这段代码。第一个
std::string
将是关键,std::function
将替换//Do something
行中的代码,另一个std::string
将是值。此解决方案的负面影响是我将为每个
key
创建一个对象,并且我必须找到一个声明所有函数的好地方。好处是它很容易调用,不会做所有的 ifelse 比较。像这样的东西会很漂亮:
void setParamater(std::string key, std::string value){
my_map(key, f(value)); //I'm not sure about the syntax in there
}
- 有人有更好的主意来替换 if-else 链吗?
map
是个好主意吗?
-仅供参考:每个案例都做了一些完全不同的事情,而不仅仅是二传手。
谢谢!
您不需要为 std::function
声明函数。另一种方法是使用 lambda。该 lambda 可以直接进入您的地图初始化。
看起来像
std::map<std::string, std::function<void(std::string)> funcs {
std::make_pair(KEYPARAM_1, [](std::string s) { std::cout << s; },
std::make_pair(KEYPARAM_2, [](std::string s) { /* something else */ }
}