以字符串形式给出的名称调用函数

时间:2014-11-15 13:47:21

标签: c++ function

在c ++中是否有可能调用在另一个函数中作为字符串arg给出的名称的函数。例如:

void func1()
{
// do something
}

void func2()
{
// do something
}

int main()
{
    call("func1");
    call("func2");
}

2 个答案:

答案 0 :(得分:7)

您可以创建std::map std::functionC++11

  std::map<std::string, std::function<void()> > call;

  call["func1"] = func1 ;
  call["func2"] = func2 ;

然后,

  call["func1"]( ) ;

答案 1 :(得分:4)

这称为反射。你在用c ++ 11吗?如果是这样看看仿函数。做你想做的事情的一种方法是制作一个名称为字符串键的函数指针映射。

#include <iostream>
#include <map>

int Func1() {}
int Func2() {}

typedef void (*FunctionPtr)(void);

int main() {

    std::map<std::string, void (*FunctionPtr)(void)> map;
    map["Func1"] = Func1;
    map["Func2"] = Func2;

    myMap["Func1"]();
}