C ++调用函数,以字符串作为参数

时间:2016-11-05 11:16:28

标签: c++ maps

假设我有几个函数,例如function1()function2(),.....,function1000() 我在一个函数中得到一个字符串,让我们说call_function(string function_name) 现在我需要根据function_name执行函数。

我搜索了解决方案,发现我可以使用地图。

有没有简单的方法为1000 keys(string type)和各自的功能创建地图?
例如:call_function(function541)然后它应该执行function541();

2 个答案:

答案 0 :(得分:0)

你可以使用map来实现这个东西的函数指针

void func1(const char *args)
{
     //....
}

void func2(const char *args)
{
     //....
}

typedef void (*function) (const char *args);

//......

std::map<std::string, function> func_map;

func_map.insert(std::pair<std::string, function>("func1", func1));
func_map.insert(std::pair<std::string, function>("func2", func2));

func_map["func1"]("arg1 arg2 arg3"); // Here is the func1 call

答案 1 :(得分:0)

  

有没有简单的方法为1000 keys(string type)和各自的功能创建地图?

     

例如:call_function(function541)   然后它应该执行function541();

不,没有简单的方法,因为 C ++没有反射。函数名仅存在于编译器中。在运行时,源代码中名为function541的函数与执行程序时内存中存在的字符串"function541"之间没有关系。

必须手动建立每个和任何此类链接:

std::map<std::string, std::function<void()>> map;
// ...
map["function541"] = function541;

当然,您仍然可以使用代码生成自动执行此类任务。像这样的机械名称的函数看起来不像手动编写的C ++代码。也就是说,您可以使用其他语言编写脚本来创建C ++代码,以将数千个函数添加到地图中,这可能是某种预构建步骤。

但是,从运行时的角度来看,无论如何都没有自动化。