将非静态成员函数传递给另一个 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::bind
和 std::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);
我有两个 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::bind
和 std::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);