函数指针指向成员函数

  • 本文关键字:函数 成员 指针 c++
  • 更新时间 :
  • 英文 :


我正在研究一种优化算法,在我的算法中,我需要使用函数指针将函数传递到优化器

类定义:

class Downhill
{
public: //
Downhill(std::string fpath);
~Downhill();
void run();
private:
/*objfun will be passed to amoeba function by function pointer*/
float objfun1(float *p,int ndim);
float objfun2(float *p,int ndim);
float objfun3(float *p,int ndim);
void amoeba(float **p, float pval[], int ndim, float(*funk)(float *, int ndim), float ftol, int &niter);

private:
float ftol;
float TINY = 1E-10;
int NMAX = 5000;
std::ofstream fout;
};

在成员函数run()的声明中,我这样做了:

float(*funk)(float *p, int dim);
funk = &(this->objfun1); // I define the function pointer here
amoeba(p, pval, ndim, funk, ftol, niter);

我有编译错误:

error C2276:  '&': illegal operation on bound member function expression

如何在另一个成员函数中引用成员函数?非常感谢!

当获取方法指针的地址时,需要包含类的名称。所以在这种情况下,合适的语法应该是:

&Downhill::objfun1

同时,非静态方法指针不能与常规函数指针互换。因此,您需要将amoeba的第三个参数声明为:

float(Downhill::*funk)(float *, int ndim)

然后你需要调用函数this->*funk(...)。如果需要将对象的标识与指针捆绑在一起,那么可以考虑将第三个参数设置为std::function<float(float*, int)>(然后使用lambda或std::bind)。但是,对于您的情况,这可能没有必要。

相关内容

  • 没有找到相关文章