有没有一种方法可以在C ++中按名称动态调用函数

时间:2019-10-12 18:22:51

标签: c++ function c++14

我有一个名为void F1()void F2() .....

的函数列表

我要求用户输入一个数字,它将调用相应的功能。 因此,如果他们输入5,它将调用F5()

我想知道有没有一种方法可以通过将用户输入附加到函数调用中来做到这一点。 类似于以下代码

std::cout << "Please enter the number of the function you wish to call " << std::endl;

std::cin >> choice;

functionToCall = "F" + choice;

3 个答案:

答案 0 :(得分:3)

不。 C ++没有这种反映。

您始终可以创建一个将字符串映射到函数指针的结构,但是您必须自己初始化此结构。

答案 1 :(得分:1)

  

我想知道有没有一种方法可以通过将用户输入附加到函数调用上来做到这一点。

否。

不是那么简单。

我能想象的最好的是使用std::vector中的std::function(或函数指针),这样您就可以写成

vfunc[0] = &F0;
vfunc[1] = &F1;
// ...

auto functionToCall = vfunc[choice]; // or better vfunc.at(choice);

答案 2 :(得分:1)

您可以这样做

#include <map>
#include <string>
#include <cmath>

typedef double(*pfunc)(double);
std::map<std::string, pfunc> functionMap_;


functionMap_["acos"] = acos;
functionMap_["cos"] = cos;
functionMap_["asin"] = asin;
functionMap_["sin"] = sin;
functionMap_["atan"] = atan;
functionMap_["tan"] = tan;

要使函数具有更多的参数,您将需要与其他函数指针进行映射

typedef double(*p2func)(double, double);
typedef void(RPNCalculator::*spfunc)(void);

以此类推