2012-11-27 33 views
-1

添加一個佔位符,當陶然成有點問題與std::bind工作 我的代碼是那種大的,所以我就堅持到要領的std ::綁定無法與1個參數

#define GETFUNC(a) (std::bind(&app::a, this, std::placeholders::_1)) 
class button{ 
button(<other parameters here>, std::function<void(int)>) { ... } 
.. 
std::function<void(int)> onhover; 
.. 
}; 

class app{ 
app(){ 
elements.push_back(buttonPtr(new button(<other parameters>, GETFUNC(onHover)); 
.. 
typedef std::unique_ptr<button> buttonPtr; 
std::vector<buttonPtr> elements; 
.. 
void onHover(int i) {} 
} 

該位代碼在std::bind失敗 (那麼多我從error log了),但作品,如果我改變:

  • 所有std::function<void(int)>std::function<void()>
  • onHover(int i)onHover()
  • std::bind(&app::a, this, std::placeholders::_1)std::bind(&app::a, this)

上爲什麼出現這種情況,我該如何解決這個問題有什麼想法?

+1

你能描述一下你想用純英語做什麼嗎?什麼是「窗口」?它有一個'onHover'成員嗎?什麼是類型? - 還有,宏使一切都更難以閱讀和調試,可以考慮手動擴展宏,並閱讀它應該看起來如何 –

+0

@DavidRodríguez-dribeas:試圖向我的按鈕添加一些回調(在懸停,onclick等) – user1233963

+0

是不是類的名稱('app')與宏('window')中使用的類名稱不匹配? – Angew

回答

1

它工作正常。選中此項並查找與代碼的區別。

#include <functional> 
#include <iostream> 


struct app 
{ 
    std::function<void (int)> 
    get_func() 
    { 
    return std::bind (&app::on_hover, this, std::placeholders::_1); 
    } 

    void on_hover (int v) 
    { 
    std::cout << "it works: " << v << std::endl; 
    } 
}; 

int 
main() 
{ 
    app a; 

    auto f = a.get_func(); 
    f (5); 
} 
+0

追查問題。我綁定了一個我沒有參數繼承的類的方法。抱歉佔用你的時間 – user1233963