我想集成一個函數與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 *'參數。它可能用於什麼? –