如何将一个类函数传递给同一个类中的另一个?

Posted

技术标签:

【中文标题】如何将一个类函数传递给同一个类中的另一个?【英文标题】:How to pass a class function to another within the same class? 【发布时间】:2021-12-18 01:47:58 【问题描述】:

我在 C++ 中使用 boost odeint 来计算一个简单的 ODE 系统。 odesys 和求解器都是同一类的方法。我将 odesys 作为参数传递给集成函数,但我得到一个 C2064 构建错误 "term does not evaluate to a function taking 3 arguments" 并让我参考库头文件中的错误。这是一个示例代码:

#include <boost/numeric/odeint.hpp>

using namespace boost::numeric::odeint;

typedef std::vector< double > state_type;

class myClass 
public:
    void odesys(state_type& x, state_type& dxdt, double t)
    
        dxdt[0] = 10.0 * (x[1] - x[0]);
        dxdt[1] = 28.0 * x[0] - x[1] - x[0] * x[2];
        dxdt[2] = x[0] * x[1] - 8.0 / 3.0 * x[2];
    
    void solver() 
        state_type x(3);
        x[0] = x[1] = x[2] = 10.0;
        const double dt = 0.01;
        integrate_const(runge_kutta4< state_type >(), &myClass::odesys, x, 0.0, 10.0, dt);
    
;

int main() 
    myClass foo;
    foo.solver();

【问题讨论】:

myClass::odesys 接受 4 个参数,第一个是指向 myClass 的指针。 您的odesys 函数是一个成员函数。它需要一个映射到this 指针的附加参数。不过,它似乎不需要成为成员函数,因为它不引用任何成员,因此您可以简单地将其设为 static 你的类没有任何成员变量,所以里面没有状态。因此,您可以使您的函数静态化,并且一切都按预期工作。 【参考方案1】:

你应该绑定对象实例(例如this):

    integrate_const(runge_kutta4<state_type>(),
                    std::bind(&myClass::odesys, this, _1, _2, _3), x, 0.0,
                    10.0, dt);

你也可以使用 lambdas 来达到同样的效果:

    integrate_const(
        runge_kutta4<state_type>(),
        [this](state_type& x, state_type& dxdt, double t) 
            return odesys(x, dxdt, t);
        ,
        x, 0.0, 10.0, dt);

查看编译Live On Coliru

【讨论】:

l查看编译Live On Coliru

以上是关于如何将一个类函数传递给同一个类中的另一个?的主要内容,如果未能解决你的问题,请参考以下文章

将 onclick 函数作为参数传递给 react/typescript 中的另一个组件

是否可以将输入函数传递给Polymer中的另一个组件

将实例变量作为参数传递给同一类中的方法?

将非静态成员函数作为参数传递给另一个类中的成员函数

将变量从一个函数传递给另一个类的另一个函数 - Python

Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?