C++ 将函数成员作为参数传递给类C++;

C++ 将函数成员作为参数传递给类C++;,c++,C++,在非静态类中,我是否可以直接传递函数成员rhs,如下所示?它报告了一些错误。我还尝试将其更改为mystepper.do\u步骤(this->rhs)它仍然不起作用。但是如果我把mystepper.do_步骤(rhs)在主函数中,rhs作为一个函数,它可以正常工作。我如何解决这个问题?非常感谢 void Animal::rhs(const double x , double &dxdt , const double t) { dxdt = 2*t;

在非静态类中,我是否可以直接传递函数成员rhs,如下所示?它报告了一些错误。我还尝试将其更改为
mystepper.do\u步骤(this->rhs)
它仍然不起作用。但是如果我把
mystepper.do_步骤(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;
    }
#包括
使用名称空间std;
ABC班{
私人:
int x=3;
int add2num(int a,int b){
返回a+b+x;
}
内特工作者(内特和乐趣(内特a,内特b),内特a,内特b){
返回乐趣(a、b);
}
公众:
内部剂量测量(内部a、内部b){
返回工人(添加2名,a、b);
}
};
int main(){
ABC试验;
cout如果rhs()函数不访问任何类成员变量(如示例中所示),则可以在类中使其成为静态函数

或者,如果需要rhs()作为类的非静态方法,可以使用std::bind()(如果编译器符合C++11)或boost::bind()将类方法绑定到类实例(即“this”)。
参见示例

C++11编译器的另一个选项是使用


无论如何,从您的源代码片段来看,并不清楚您想要做什么,我建议您包含一个最小但完整的源代码,以显示您的需要,以及更好地定义“不工作”和“一些错误”。

您可以使用lambda,这样您就可以在函数中包装对类方法的调用:

void  Animal::response() {    
    mystepper.do_step([&](const double x , double &dxdt , const double t) 
        { return rhs(x, dxdt, t); });   
}

但是看看你的
rhs
函数,它很容易成为一个静态类函数(里面没有对Animal类成员的调用).

使其成为
静态的
。使其成为
静态函数
或使用
std::bind
`lambda function`来知道应该调用哪个对象。它通过将rhs更改为静态函数来工作!但是如果rhs中有许多参数,这些参数在动物启动的不同实例中是不同的呢?还有其他方法来生成cod吗ES不改变RHS作为静态函数吗?见下面的答案…学习STD::Band()。我是C++新手,我还没找到解决办法。下面是一个极简主义代码来说明我正在做的事情。