在我的 C++ 程序中,我有多个实例试图在给定
std::string name
的情况下查找某些属性。 struct Bar {
SomeClass obj;
int doSomething(std::string input) {
if (input == "a") {
return obj.a();
} else if (input == "b") {
return obj.b();
}
...
}
}
我无法修改
SomeClass
的定义。
我的代码的其他部分有很多类似的实例,但它们只是返回整数,而不需要调用另一个方法。
我的问题如下:实现此目的以避免一堆条件语句使代码混乱的最佳实践方法是什么?
尽管我倾向于同意 @DevSolar 的评论,即这似乎是一个 XY 问题,但一种选择是将字符串键映射到函数指针,如下所示:
struct Bar {
SomeClass obj;
std::map<std::string, int (*)()> methodMap = {
{"a", &SomeClass::a},
{"b", &SomeClass::b},
};
int doSomething(std::string input) {
if (methodMap.count(input) > 0) {
return methodMap[input](obj);
} else {
return -1;
}
}
};
请注意,
else { return -1; }
块用于处理未映射的“字符串”(键)。