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

Call function by name given as a string

本文关键字:调用 函数 字符串      更新时间:2023-10-16

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

void func1()
{
// do something
}
void func2()
{
// do something
}
int main()
{
    call("func1");
    call("func2");
}

您可以创建std::function C++11 的std::map

  std::map<std::string, std::function<void()> > call;
  call["func1"] = func1 ;
  call["func2"] = func2 ;

然后

  call["func1"]( ) ;

称为反射。您使用的是 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"]();
}