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

3
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个回答

3

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

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

或者使用bind,请在这里查看

c++类型转换问题:<未解决的重载函数类型>


5
额,我本以为 std::function 应该会让事情变得更容易 :-( - kirill_igum
setFunction( [this] (int i) { this->print_num (i); } ); 也可以工作。 - kirill_igum
使用[this]会复制对象,所以你可能想要使用[&this]或者只是[&] - wjl
4
这句话的意思是“这个this是一个指针,所以使用[this]会复制这个指针”。 - JohnB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接