使用std :: bind删除参数

时间:2016-07-18 19:25:01

标签: c++ c++11

我目前正在编写一个使用事件系统来表示用户界面交互的库。每个侦听器可以是指向对象的指针和要调用的函数,也可以是std :: function。例如,MenuItem对象定义一个OnClick事件,该事件将调用一个带有MenuItem *的函数:

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 - 我确实认识到我可以使用lambdas来做同样的事情,但是如果bind可以做同样的事情那么它可能在风格上更令人愉悦。

1 个答案:

答案 0 :(得分:1)

绑定实际上已经这样做了,它会丢弃任何额外的参数。

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

只需致电a()