【发布时间】:2017-01-22 21:25:56
【问题描述】:
我有一个类的非静态成员函数:
int Band::overlap(unsigned dim, const double *x, void *data_p, unsigned fdim,
double *retval){
int *data = (int*) data_p;
// data[0] = m; data[1] = n; data[2] = k_ind; data[3] = b
cmplx result = (this->U(x[0], x[1], x[2], data[2], data[0])).adjoint()
* this->U(x[0], x[1], x[2], data[2] + data[3], data[1]);
retval[0] = result.real();
retval[1] = result.imag();
return 0;
}
我想将它传递给cubature,这要求它采用以下形式:
int f(unsigned ndim, const double *x, void *fdata, unsigned fdim, double *fval)
我考虑过使用std::mem_fn,但如果我使用:
auto bla = std::mem_fn(&Band::overlap);
我的电话是:
bla(band_obj, ....)
哪个容积不接受。然后我考虑使用 lambdas,但我读到我只能转换非捕获 lambdas,因此我无法捕获 band_obj。
我意识到,有人问过这个问题的变体,我试过了,但似乎没有一个有效。
【问题讨论】:
-
寻找
std::bind... -
@barakmanos 绑定不起作用。
f是指向 C 函数的指针,例如:没有this参数。
标签: c++ function-pointers member-function-pointers