【发布时间】:2016-12-28 08:39:31
【问题描述】:
在非静态类中,我可以像下面这样直接传递函数成员 rhs 吗?它报告了一些错误。我还尝试将其更改为mystepper.do_step(this->rhs)它仍然不起作用。但是如果我将mystepper.do_step(rhs); 放在主函数中,并将rhs 作为函数,它就可以正常工作。我该如何解决这个问题?非常感谢!
void Animal::rhs(const double x , double &dxdt , const double t) {
dxdt = 2*t;
};
void Animal::response() {
mystepper.do_step(rhs);
}
我做了一些极简代码来说明我之前的问题。非常感谢您的帮助!!
#include <iostream>
using namespace std;
class ABC{
private:
int x =3;
int add2num(int a, int b){
return a+b+x;
}
int worker(int &fun(int a, int b), int a, int b){
return fun(a,b);
}
public:
int doSomething(int a, int b){
return worker(add2num, a, b);
}
};
int main() {
ABC test;
cout << test.doSomething(3,5) << endl;
return 0;
}
【问题讨论】:
-
让它
static。 -
设为
static function或使用std::bind`lambda 函数`来知道应该在哪个对象上调用它。 -
它通过将 rhs 更改为静态函数来工作!但是,如果我在 rhs 中有许多参数在由 Animal 发起的不同实例中是不同的呢?还有其他方法可以在不将 rhs 更改为静态函数的情况下使代码正常工作吗?
-
查看下面的答案...学习 std::bind()。
标签: c++