我对函数指针有一些困难。我有一个基类,它定义了一个函数指针,通过typedef double (*function)(double *x) const;
一个小问题:为什么上面的 typedef 不能编译?
给出以下错误:错误:'function'上的'const'和'volatile'函数说明符在类型声明中无效
对于下面的部分,我使用typedef double (*function)(double *x)。现在每个子类都可以实现这种类型的多个不同版本的函数。通过枚举,我选择了我选择的函数,它将我的非成员函数指针(在基类中定义)设置为由子类的这些成员函数指针之一初始化。这是一个代码片段:
子类的源文件:
PndLmdROOTDataModel1D::PndLmdROOTDataModel1D(interpolation_type intpol_type) {
if(intpol_type == CONSTANT) {
setModelFunction(&PndLmdROOTDataModel1D::evaluateConstant);
}
else if (intpol_type == SPLINE) {
setModelFunction(&PndLmdROOTDataModel1D::evaluateSpline);
}
else {
setModelFunction(&PndLmdROOTDataModel1D::evaluateLinear);
}
}
和基类(头文件):
class MultiModel1D: public Model1D {
protected:
function model_func;
public:
MultiModel1D();
virtual ~MultiModel1D();
void setModelFunction(function f);
}
编译时出现以下错误:
注意:没有已知的参数 1 从 'double (PndLmdROOTDataModel1D::*)(double*)' 到 'function {aka double (*)(double*)}'的转换</p>
由于速度问题,我正在使用函数指针(至少我认为这应该比不断运行某些开关盒更快)。我究竟做错了什么?也许还有一些设计模式可以作为更好的选择......提前致谢!
史蒂夫