如何将成员函数传递给接受函数指针的组合成员?

How to pass member functions to composition's member that takes function pointers?

本文关键字:函数 成员 指针 组合      更新时间:2023-10-16

>我有下面的类,它为我评论的行产生此错误: 说明 无效参数 '候选人是:特征::矩阵Forward_Euler(双()(双),双()(双),双(*)(双))' 我在尝试寻找解决方案时感到困惑。

前欧拉的签名是:

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;
    }

成员函数指针和函数指针不是一回事。成员函数指针的工作要困难得多,需要处理虚函数和this指针之类的东西。

但是看看你类中的函数!它们不是真正的对象函数,因为它们不使用对象中的任何内容。您可以将它们移出类,也可以使它们static类的函数。如果您执行其中任一操作,则可以将它们用作函数指针。

我认为您必须使用类模板和静态函数。您可以将参数作为模板参数提供。