由于我们在这里使用 C++ 是硬汉,我会使用map
from string
(您的输入)to void *
(表示所有函数),这样我就不需要依赖映射中可调用函数的任何特定顺序。我也不需要将输入转换为数字(如果输入来自控制台并且是字符串)
#include <map>
#include <string>
#include <iostream> // for cout
using namespace std; // that's the way I like it
int main()
{
map<string, void *> funcs;
funcs["func1"] = (void *)func1;
funcs["func2"] = (void *)func2;
...
string s = myinput();
if (funcs.find(s) != funcs.end()) {
((void (*)())funcs[s])(); // call the function (first casting it to the function's data type
}
else cout << "### Error: function " << s << " doesn't exist in map" << endl;
return 0;
}