从类成员函数返回一个函数指针

时间:2017-12-08 10:09:46

标签: c++ pointers

我有AbstractOdeSolver类,如下所示:

class AbstractOdeSolver
{
private:
    double (*rightHandSide)(double y,double t);

public:
    AbstractOdeSolver(int nop,double initime, double fintime, double initval, double(*pf)(double,double));
    double (*GetRightHandSide)(double y, double t)();
};

所以我有一个私有成员的类,一个函数指针即rightHandSide,我想从一个成员函数返回它。所以...

  1. 我不知道代码的最后一行是否定义了我想要定义的内容,但我写下了这个答案Returning function pointer type

  2. 如果最后一行是正确的,那么我想知道如何在AbstractOdeSolver.cpp中编写实现?我试过了:

    double (*AbstractOdeSolver::GetRightHandSide)(double y, double t)()
    

    但是即使从编辑器(Kdevelop)也不接受这一点,我认为通过一个小的修订版,它被称为类似于成员函数的指针,而不是指向函数的指针。

  3. 请注意,我想返回一个指向一个带两个双精度的函数的指针 返回一个double,如果无法完成则没问题。

1 个答案:

答案 0 :(得分:1)

IIUC你想要什么,最简单的方法是使用typedef

class AbstractOdeSolver 
{
public:
    typedef double (*FSolver)(double, double);
    ....
    FSolver GetRightHandSide();
};
....
AbstractOdeSolver::FSolver AbstractOdeSolver::GetRightHandSide()
{ 
    // just for an example:
    return +[](double, double) -> double { return 0.0; }    
}

同样没有typedef

class AbstractOdeSolver
{
public:
    double (* GetRightHandSide())(double, double);
};

double (*AbstractOdeSolver::GetRightHandSide())(double, double)
{
    return +[](double, double) -> double {return 0.0; };
}

使用@ Jarod42建议的尾随返回类型:

class AbstractOdeSolver
{
public:
    auto GetRightHandSide() -> double (*)(double, double);
};

auto AbstractOdeSolver::GetRightHandSide() -> double (*)(double, double)
{
    return +[](double, double) -> double {return 0.0; };
}