如何将 class 函数传递给同一个 class 中的另一个函数?
How to pass a class function to another within the same class?
我在 C++ 中使用 boost odeint 来计算一个简单的 ODE 系统。 odesys 和 solver 都是相同 class 的方法。我将 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();
}
您应该绑定对象实例(例如this
):
integrate_const(runge_kutta4<state_type>(),
std::bind(&myClass::odesys, this, _1, _2, _3), x, 0.0,
10.0, dt);
您也可以使用 lambda 来实现相同的目的:
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);
我在 C++ 中使用 boost odeint 来计算一个简单的 ODE 系统。 odesys 和 solver 都是相同 class 的方法。我将 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();
}
您应该绑定对象实例(例如this
):
integrate_const(runge_kutta4<state_type>(),
std::bind(&myClass::odesys, this, _1, _2, _3), x, 0.0,
10.0, dt);
您也可以使用 lambda 来实现相同的目的:
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);