如何将函数用作成员函数的参数?

时间:2015-04-26 08:53:03

标签: c++ class c++11

我试图使用成员函数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); }

它没有用。

0 个答案:

没有答案