2012-10-11 76 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

相關問題