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

Return a function pointer from a class member function

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

我有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. 我不知道代码的最后一行是否定义了我想要定义的内容,但我写的时候考虑到了这个答案返回函数指针类型。

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

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

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

请注意,我想返回一个指向函数的指针,该函数需要两个双精度和 返回一个双精度,如果不能完成也没关系。

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