c++ - 从类成员函数返回函数指针

标签 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)();
};

所以我有一个类,它有一个私有(private)成员,一个函数指针,即 rightHandSide,我想从成员函数中返回它。所以……

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

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

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

    但这甚至不被编辑器 (Kdevelop) 所接受,我认为经过一个小的修改,它被称为指向成员函数的指针之类的东西,而不是指向函数的指针。

请注意,我想返回一个指向一个函数的指针,该函数接受两个 double 和 返回一个 double,如果不能完成也没关系。

最佳答案

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

关于c++ - 从类成员函数返回函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47712044/

相关文章:

c++ - 使用 fprintf 连续写入字符串

php - PHP 与 C 中的箭头运算符

c++ - 通过指向结构的指针访问结构中的值

c++ - 如何重启套接字程序?

c++ - C++ STL 中的 const_iterator 和非 const 迭代器有什么区别?

c++ - GTKmm - 如何将 pixbuf 放入 TreeView 中

c++ - 使用静态成员充当具有模板的命名空间 : bad idea?

C 指针操作

c - 同类指针的区别

c++ - 在这种情况下,可以避免在c++中手动管理内存吗?