我目前正在针对使用事件系统表示用户界面交互的库进行编码。每个侦听器可以是指向对象和要调用的函数的指针,也可以是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-我确实意识到我可以使用lambda来完成相同的事情,但是如果bind可以完成相同的事情,那么从样式上来说,它可能会更令人满意。

最佳答案

绑定实际上已经做到了,它会丢弃任何多余的参数。

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


只会调用a()

关于c++ - 使用std::bind删除参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38444485/

10-13 06:14