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);
  }
};

this doesn't work. i get note: no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘std::function<void(int)>’ and other errors.

If I put the definition of print_num outside of the class. everything works. i tried adding &A::, A:: and this. nothing helped.

ildjarn
  • 59,718
  • 8
  • 115
  • 201
kirill_igum
  • 3,703
  • 5
  • 37
  • 68

1 Answers1

3

print_num is a non-static member function, which means that it has an implicit first argument of type A*. You can, for instance, pass that by using a lambda:

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

or use bind, see here

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

Community
  • 1
  • 1
JohnB
  • 12,033
  • 4
  • 34
  • 63