在我的类AID中,我有三个拟合曲线函数:LastStateFitting,LinearCurveFitting和QuadCurveFitting。另一个功能选择哪一个最合适。我在地图中存储了指针方法(boost :: unordered_map):
typedef enum predMethod{LAST, LINEAR, QUAD} predMethod;
predMethod method;
typedef double*(AID::*fitting)(double[3]);
double * LastStateFitting(double x[3]);
double * LinearCurveFitting(double x[3]);
double * QuadCurveFitting(double x[3]);
const boost::unordered_map<predMethod, fitting> fittingMap = map_list_of
(LAST, &AID::LastStateFitting)
(LINEAR, &AID::LinearCurveFitting)
(QUAD, &AID::QuadCurveFitting);
我不明白我是如何做到这些功能的。现在,我已经完成了:
for ( int fit = LAST; fit != QUAD; fit++ )
{
predMethod pm = static_cast<predMethod>(fit);
double pred[3] = (*fittingMap.at(pm))(x);
但是这给了我:
错误:间接需要指针操作数 (&#39; mapped_type&#39;(又名&#39; double (AID :: )(double *)&#39;)无效) double pred [3] =(* fittingMap.at(pm))(x);
因此我的问题是:如何在地图内调用方法指针?
编辑:方法指针的一些帖子已经回答(here或here)。但是在这里,由于地图container.h,它仍然无法正常工作。