2014-05-21 50 views
1

我嘗試使用std ::函數,像這樣的成員函數:VS2013的std ::與成員函數功能

struct Foo 
{ 
    void bar(int) const { /* ... */ } 
}; 

//later on 
std::function<void(const Foo&, int)> fun = &Foo::bar; 

這個工程下GCC 4.8.1,但無法在VS2013編譯如下錯誤:

error C2664: 'void std::_Func_class<_Ret,const Foo &,int>::_Set(std::_Func_base<_Ret,const Foo &,int> *)' : 
cannot convert argument 1 from '_Myimpl *' to 'std::_Func_base<_Ret,const Foo &,int> *' 

它看起來像我在VS中的錯誤,但也許我沒有看到什麼?有沒有一種方法來解決它(沒有像boost這樣的外部庫)?

編輯:我忘記了酒吧簽名中的「const」。但是這在VS中仍然不起作用。

回答

3

std::function需要接受指向成員函數的指針(定義INVOKE)。

最簡單的解決方法是使用std::mem_fn代替,或纏上std::mem_fn構造函數的參數:

std::function<void(const Foo&, int)> fun = std::mem_fn(&Foo::bar);