我在函数指针方面遇到了一些困难。我有一个基类,它定义了一个函数指针,通过 typedef double (*function)(double *x) const;
一个快速的侧面问题:为什么上面的 typedef 无法编译?
会出现以下错误:error: ‘const’ and ‘volatile’ function specifiers on ‘function’ invalid in type declaration
对于下面的部分,我使用 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*)}'
我正在使用函数指针,因为速度问题(至少我认为这比不断运行某些开关情况要快)。我做错了什么?也许还有一些设计模式可以作为更好的替代方案...提前感谢!
史蒂夫
this
参数),成员函数指针也不同于函数指针。你正在试图将成员函数指针塞入函数指针中。 - Nik Bougalis