映射包含 C++ 中的函数指针

Map containing function pointers in C++

问题用包含字符串作为键和函数指针作为值的映射替换了我的 if 和 else 语句。但是,每个函数指针都可以指向具有不同 return 类型和不同参数的函数,而无需使用 boost。基本上我想知道的是如何创建一个以通用函数指针作为其值的映射。

以下是我要解决的问题的简化版本。所需的输出。

#include<iostream>

int addtwoNumber(int a, int b){
    return a+b;
}
bool isEqual(std::string str, int number){
    return std::stoi(str)==number;
}

int main(){
    // create a map that contains funtion pointers
    template<typename ReturnType, typename... Args>
    std::map<std::string, ReturnType (*)(Args...)> actionMap; // create a map<string, function pointer>


    actionMap.insert(std::make_pair("one", &addtwoNumber)); // add functions to the map
    actionMap.insert(std::make_pair("two", &isEqual));

    std::cout << "type commands and arguments: " << std::endl;
    std::string command;
    std::cin >> command;
    auto func = actionMap.find(command[0]);
    std::cout << *func() << std::endl; // how do I pass the arguments to the function
}

期望的输出:

./test.out              
one 2 5                  /user input
7                        /Output of the program
./test.out
two 5 5
true
struct do_nothing_map{
  void insert(...){}
  int(*)() find(...){return []{return 0;};}
};
int main(){
  do_nothing_map actionMap;

  actionMap.insert(std::make_pair("one", &addtwoNumber));
  actionMap.insert(std::make_pair("two", &isEqual));

  std::cout << "type commands and arguments: " << std::endl;
  std::string command;
  std::cin >> command;
  auto func = actionMap.find(command[0]);
  std::cout << *func() << std::endl;
}

您拒绝更广泛地描述您的问题,而是说您 "just wanted the above code to compile"。我尽可能少地改变它来编译它。它没有任何用处,但可以编译,并且几乎没有变化。

不客气,提前。

这是一个类似的问题,答案应该有用: answer showing heterogeneous function map

答案显示了如何在地图中调用函数。