在非静态类中,我可以直接传递函数成员rhs,如下所示吗?它报告了一些错误。我也尝试将其更改为mystepper.do_step(this->rhs)
它仍然无法正常工作。但是如果我将mystepper.do_step(rhs);
放在main函数中,并将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;
}
答案 0 :(得分:1)
您可以使用lambda,因此可以在函数中包含对class方法的调用:
void Animal::response() {
mystepper.do_step([&](const double x , double &dxdt , const double t)
{ return rhs(x, dxdt, t); });
}
但是看看你的rhs
函数,它很容易就是一个静态类函数(里面没有对Animal类成员的调用)。
答案 1 :(得分:0)
如果你的示例中没有访问任何类成员变量,你可以在你的类中使rhs()函数为静态。
或者,如果你需要rhs()作为类的非静态方法,你可以使用std :: bind()(如果你的编译器符合C ++ 11)或者boost :: bind()来将类方法绑定到类实例(即&#34;此&#34;) 请参阅示例in this other StackOverflow answer。
C ++ 11编译器的另一个选择是使用lambda functions。
无论如何,您的源代码片段并不是很清楚您想要做什么,我建议您添加一个最小但完整的源代码,以显示您的需求,以及更好地定义&#34;没有&#39;工作&#34;和#34;一些错误&#34;。