我想集成一个函数与gsl。因此,我必须定义一个函数f
(integrant必须是double (*)(double, void*)
的形式)。对于gsl集成方法的调用,我需要定义一个结构体,它包含一个指向函数的指针(该结构体被称为gsl_function
)。指向一个对象的成员函数的指针
gsl_function F;
F.function = &MyClass::my_f;
功能f
必须在类(在相同的类从该积分过程应该被称为)来实现。我该如何分配上面正确的指针,因为2号线未编译和导致错误:
cannot convert ‘double (MyClass::*)(double, void*)’ to ‘double (*)(double, void*)’ in assignment.
这里的my_f
struct my_f_params { double a; double b;};
double my_f (double x, void * p) {
struct my_f_params * params = (struct my_f_params *)p;
double a = (params->a);
double b = (params->b);
return 1.0/(sqrt(a * (1.0 + x)*(1.0 + x)*(1.0 + x) + (1-a) * std::pow((1.0 + x), (3.0 * (1.0 + b)))));
}
您需要在那里提供'static'成员函数作为回调函数。我想''void *'参数可以被(错误)用来在必要时传递'this'指针。 –
指向成员的指针不是普通的指针。你将不得不把它包装在一个平面的功能。 SO上有很多这种技术的例子。 –
想一想'gsl_function :: function'的'void *'参数。它可能用于什么? –