使用std::bind删除参数

Use std::bind to remove arguments

本文关键字:参数 删除 bind 使用 std      更新时间:2023-10-16

我目前正在针对一个库进行编码,该库使用事件系统来表示用户界面交互。每个监听器可以是指向要调用的对象和函数的指针,也可以是std::函数。例如,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可以做同样的事,那么它可能在风格上更讨人喜欢。

Bind实际上已经做到了,它丢弃了任何额外的参数。

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

只会调用a()