将输入从std :: cin转换为可运行代码C ++

时间:2015-08-31 22:24:21

标签: c++ c++11 input

我正在开发一个项目,我需要一种从控制台/用户接收输入的方法,并使用它来运行代码中的某个部分,而无需精心设计的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来执行此操作,因为来自用户输入。

3 个答案:

答案 0 :(得分:3)

也许最简单的方法是使用std::mapstd::function个对象:

std::map<std::string, std::function<void()>> funcs;
funcs[userInputString]();

Live example

根据您的要求,您可能需要比这更复杂的东西,但在某些复杂程度上,您可能需要考虑嵌入像Lua这样的脚本语言。

答案 1 :(得分:2)

直接前进:

  • 制作stringstd::function<void()>
  • 的地图
  • 获取cin输入字符串
  • 将空格string分解为string数组
  • 如果第一个值为“run”,则在地图中搜索第二个值,如果找到,则执行函数指针。

参数很难以这种方式实现。

更好的方式:

使用LUA,Squirrel,Angel Code,JS,Python或任何其他可用的C / C ++嵌入式语言。

答案 2 :(得分:0)

-dontwarn android.net.http.AndroidHttpClient
-dontwarn com.google.android.gms.**