как избежать статической функции-члена при использовании gsl с c ++
Я хотел бы использовать GSL в классе C ++ без объявления функций-членов какstatic
, Причина в том, что я нене знаю их слишком хорошо, и яЯ не уверен в безопасности ниток. Из того, что я прочитал,std::function
может быть решением, но яЯ не уверен, как его использовать.
Мой вопрос сводится к тому, как я могу удалитьstatic
в декларации?g
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
class A {
public:
static double g (double *k, size_t dim, void *params)
{
double A = 1.0 / (M_PI * M_PI * M_PI);
return A / (1.0 - cos (k[0]) * cos (k[1]) * cos (k[2]));
}
double result() {
double res, err;
double xl[3] = { 0, 0, 0 };
double xu[3] = { M_PI, M_PI, M_PI };
const gsl_rng_type *T;
gsl_rng *r;
////// the following 3 lines didn't work ///////
//function fg;
//fg = &A::g;
//gsl_monte_function G = { &fg, 3, 0 };
gsl_monte_function G = { &g, 3, 0 };
size_t calls = 500000;
gsl_rng_env_setup ();
T = gsl_rng_default;
r = gsl_rng_alloc (T);
{
gsl_monte_plain_state *s = gsl_monte_plain_alloc (3);
gsl_monte_plain_integrate (&G, xl, xu, 3, calls, r, s, &res, &err);
gsl_monte_plain_free (s);
}
gsl_rng_free (r);
return res;
}
};
main() {
A a;
cout