将非静态成员函数传递给另一个 class 的成员函数

Pass non-static member function to member function of another class

我有两个 classes A 和 B。我想从 class A 调用 class B 的成员函数,同时将 A 的成员函数传递给所述函数B. 设置:

class B {
    public:
        int dopristep(std::function<int(int,int)> f, double t, double h);
    };

class A {
public:
    
    void run();
    int g(int,int);
    B* mB;
};

void A::run() {

    ires         = mB->dopristep(&g,  T, h)   
}

int A::g(int,int){
//do something
}

我尝试使用 std::bindstd::function 定义。但它不起作用,因为它以某种方式需要静态成员函数。 (我知道这里也有类似的问题。但几乎所有这些问题都在主调用中或仅在一个 class 中)。我能找到的最相似但没有帮助的案例是 .

任何人都可以帮助我实现这个吗?

ERROR:reference to non-static member function must be called

here 所述,传递调用封闭 A 实例函数的 lambda:

mB->dopristep([&] (int a, int b) { return g(a, b); }, T, h);

此外,您可以修改 dopristep 以接受可以避免一些开销的泛函:

template <typename F>
int dopristep(F&& f, double t, double h);