2016-07-18 10 views
0

現在、イベント・システムを使用してユーザー・インターフェースのやりとりを表すライブラリーをコーディングしています。各リスナーは、オブジェクトへのポインタと呼び出す関数、またはstd :: functionのいずれかです。たとえば、MenuItemオブジェクトは、MenuItemの*を取る関数を呼び出しますOnClickイベントを定義します。std :: bindを使用して引数を削除する

someMenuItem->OnClick.addListener(this, &myObj.doSomeAction); 
... 
void myObj::doSomeAction(MenuItem* menuItem) {} 

または

someMenuItem->OnClick.addListener([](MenuItem* menuItem) {}); 

それはしばしばdoSomeActionがの公開APIの一部である場合です私たちはメニュー項目を選択する以外の何らかの理由で呼びたいかもしれないクラスです。 std :: bindを使用してMenuItem *引数を破棄してdoSomeAction(MenuItem* menuItem)を単にdoSomeAction()と定義できるようにすることはできますか?

PS - 私はラムダを使って同じことをすることができますが、バインドが同じことをすることができれば、いくつかの点で文体的に喜ばれるかもしれません。

答えて

1

バインドは実際にこれを既に実行しています。余分な引数はすべて破棄します。

void a(); 
std::bind(a)(1, 2, 3) 

だけ呼び出しますa()

関連する問題