cmath函数的C ++映射

时间:2013-06-16 17:35:22

标签: c++ function map

我想创建一个映射,其中键是一个函数名作为字符串,值是函数本身。所以像这样......

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

typedef std::function<double(double)> mathFunc;

int main() {
    std::map< std::string, mathFunc > funcMap;

    funcMap.insert( std::make_pair( "sqrt", std::sqrt ) );

    double sqrt2 = (funcMap.at("sqrt"))(2.0);

    return 0;
}

将用于在某个输入值上调用sqrt函数。然后你当然可以在地图上添加其他函数,如sin,cos,tan,acos等,然后通过一些字符串输入调用它们。我的问题是地图中的值类型应该是什么,函数指针和std :: function在std :: make_pair行中给出以下错误

error: no matching function for call to 'make_pair(const char [5], <unresolved overloaded function type>)'

那么我的值类型应该是内置函数,比如std :: sqrt?

由于

2 个答案:

答案 0 :(得分:4)

typedef double (*DoubleFuncPtr)(double);
...
funcMap.insert( std::make_pair( "sqrt", static_cast<DoubleFuncPtr>(std::sqrt) ) );

答案 1 :(得分:0)

您可以将typedef用于函数指针,因为它的地图可以使用operator []来插入函数:

typedef double(*mathFunc)(double);

...

funcMap[std::string( "sqrt")]= std::sqrt;

...

代码ideone

对于不使用单个double作为参数的函数,您将需要一些其他映射。