我正在开发一个项目,我需要一种从控制台/用户接收输入的方法,并使用它来运行代码中的某个部分,而无需精心设计的switch / if:else语句。我举个例子。
#include <iostream>
#include <string>
using namespace std;
void foo();
void foo2();
int main(){
string s;
cin >> s;
/*Take the input from cin and turn it into a function call, or some other
form of runnable code, like so*/
//Lets say the user inputs "run foo"
foo();
//Or if they input "run foo2"
foo2();
return 0;
}
void foo(){
cout << "Foo works, yay :D";
}
void foo2(){
cout << "Foo2 works, yay :D";
}
你可能认为我可以用一个开关或多个if:else语句来做这个,但是这个小代码只是我需要做的一个很小的代表。该项目要求大规模使用它,如果我不需要使用它,我会喜欢它,以节省线。
那么我有什么方法可以在C ++中做到这一点?控制台用户告诉程序运行什么并运行所述函数?
谢谢!
编辑这不是函数调用字符串的重复,因为它直接从用户获取输入而不是程序。除了答案显示您可以使用lua来执行此操作,因为来自用户输入。
答案 0 :(得分:3)
也许最简单的方法是使用std::map
个std::function
个对象:
std::map<std::string, std::function<void()>> funcs;
funcs[userInputString]();
根据您的要求,您可能需要比这更复杂的东西,但在某些复杂程度上,您可能需要考虑嵌入像Lua这样的脚本语言。
答案 1 :(得分:2)
直接前进:
string
到std::function<void()>
cin
输入字符串string
分解为string
数组参数很难以这种方式实现。
更好的方式:
使用LUA,Squirrel,Angel Code,JS,Python或任何其他可用的C / C ++嵌入式语言。
答案 2 :(得分:0)
-dontwarn android.net.http.AndroidHttpClient
-dontwarn com.google.android.gms.**