将std :: function分配给成员函数

时间:2012-10-11 06:45:54

标签: c++ c++11 std-function

class A {
public:
  std::function<void(int)> f_;
  void print_num(int i) {
    cout << i;
  }
  void setFuntion(std::function<void(int)> f) {
    f_=f;
  }
  void run() {
    setFunction(print_num);
  }
};

这不起作用。我得到note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘std::function<void(int)>’和其他错误。

如果我把print_num的定义放在课外。一切正常。我尝试添加&A::A::this.没有任何帮助。

1 个答案:

答案 0 :(得分:3)

print_num是一个非静态成员函数,这意味着它具有类型为A*的隐式第一个参数。例如,您可以使用lambda:

传递它
void run() { 
    auto myself = this;
    setFunction( [myself] (int i) { myself->print_num (i); } ); 
} 

或使用bind,请参阅此处

c++ Trouble casting overloaded function: <unresolved overloaded function type>