Как передать функции-члены члену композиции, который получает указатели на функции?

У меня есть класс ниже, который выдает эту ошибку для строк, которые я прокомментировал: Описание Кандидаты недопустимых аргументов:
Eigen :: Matrix Forward_Euler (double () (двойной), двойной () (double), double (*) (double)) «Я запутываюсь, когда пытаюсь найти решение.

Подпись Форварда Эйлера:

Eigen::MatrixXd Forward_Euler(double (*f)(double), double (*gleft)(double), double (*gright)(double))

И мой класс это:

class C
{
protected:
A x;
B y;
double a;
double b;
Eigen::MatrixXd u;

public:
double f(double x)
{
return a;
}
double gleft(double tau)
{
return b
}
double gright(double tau)
{
return a*b;
}
FD_Euro_Put(): x(), y(), a(0), b(0){}
FD_Euro_Put(char y1, double y2, double y3, double y4, double x2,
double x3, double x4, double x5, double x6, double x7):
x(x1, x2, x3, x4, x5, x6, x7)
{
double Xleft = x1*x2;
double Xright = x1*x3;
double Tauf = x1*x1;
double NN = floor((x1/x2);
a = x1*x2 - 0.5;
b = x1*x2 + 0.5;

pde = HeatPDE(y1, NN, Xleft, Xright, Tauf, Alpha); //begin problem area
u.resize(pde.N+1, pde.M+1);
if(fdtype == 'f')
u = pde.Forward_Euler(&f, &gleft, &gright);
else if(fdtype == 'b')
u = pde.Backward_Euler(&f, &gleft, &gright);
else if(fdtype == 'c')
u = pde.Crank_Nicolson(&f, &gleft, &gright); //end problem area
else
cout << "Incorrect choice for finite difference type!" << endl;
}

0

Решение

Указатели на функции-члены и указатели на функции — это не одно и то же. Указатели на функции-члены выполняют гораздо более сложную работу и должны иметь дело с такими вещами, как виртуальные функции и this указатель.

Но посмотрите на функции в вашем классе! Они на самом деле не являются объектными функциями, потому что они ничего не используют от объекта. Вы можете вывести их из класса или сделать их static функции класса. Если вы делаете одну из этих вещей, вы можете использовать их как указатели на функции.

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

3

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

Других решений пока нет …

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