Проблема с указателем на функцию

У меня есть простой код

class a{
public:
double (a::*fun)(const double &) const;
//
....
//
};

class b{
public:
a c1;
double f(const double & x) const{
return 0;
}

b(){
c1.fun = f;
}
};

Это означает, что класс «а» должен работать с функциями определенного типа, и его работа не зависит от реализации этой функции (например, алгебраическая интерполяция). Я хочу сделать параметр класса — функции.
Но у меня есть некоторые проблемы. Написать компилятор

значение типа «int (b ::) (const int &x) const «нельзя присвоить объекту типа» int (a ::) (const int &) const «

Как это сделано правильно?

0

Решение

double (a::*fun)(const double &) const объявляет указатель на функцию-член класса a которые возвращают двойной и принимает const double&,

В вашем примере вы пытаетесь назначить функцию, определенную в классе b, вот почему вы получаете ошибку.

1

Другие решения

Возможно, шаблон решит это:

template <typename T>
struct Params
{
double (T::* fun)(const double &) const;
// ...
};class B
{
Params<B> params;

double f(const double &) const;

public:
B() : params(&B::f) { }
// ...
};

Чтобы вызвать функцию где-нибудь в нестатической функции-члене B в текущем случае вы бы сказали:

double d;
(this->*params.fun)(d);
1

По вопросам рекламы [email protected]