我试图使用成员函数Sover :: tov作为使用std :: bind的另一个函数的参数。我在调用std :: bind时遇到编译错误。简而言之,我的代码的本质如下。我的语法有什么问题,或者有更好的方法来做我想要的事情?
class Solver {
private:
....
public:
....
double solve(vector< vector<double> > & sol, const double &z, const double &n)
{...
method(std::bind(&Solver::tov, *this, pl::_1 , pl::_2 , pl::_3 ),y,x,dx)
...}
void tov ( const vector<double> &y, vector<double> &dy, const double &x ) {...}
};
void method(void (*i_function)(const vector< double > &, vector<double> &, const double &), vector< double > &y, const double &x, const double &h) {...}
让我举一个具体的例子来重现我的主要问题:
void method(void (*i_function)(double &), double &y) { i_function(y); }
class Solver
{
public:
Solver() {}
void solve(double &y) { method(do_calc,y); }
void do_calc(double &x) { x += 1; }
};
int main()
{
double y = 1;
Solver().solve(y);
std::cout << y << std::endl;
}
给出错误: 错误:无法将'Solver :: do_calc'从类型'void(Solver ::)(double&amp;)'转换为'void(*)(double&amp;)' void solve(double&amp; y){method(do_calc,y); }
即使我使用
void method(std::function<void(double &)> i_function, double &y) { i_function(y); }
它没有用。