2012-10-11 73 views
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)>’和其他错误。将std :: function分配给成员函数

如果我把print_num的定义放在类之外。一切正常。我试着加入&A::,A::this.没有什么帮助。

回答

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>

+2

EHH,我想的std ::功能应该让事情变得更加容易: - ( –

+0

'setFunction([this](int i){this-> print_num(i);});'also worked –

+0

使用'[this]'制作对象的副本,所以你可能想'[&this] ,或者只是'[&]'。 – wjl

相关问题