使用std::bind删除参数
Use std::bind to remove arguments
我目前正在针对一个库进行编码,该库使用事件系统来表示用户界面交互。每个监听器可以是指向要调用的对象和函数的指针,也可以是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()
相关文章:
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- std::p ackaged_task 应该删除带有 const 参数的复制 c'tor
- Qt5 - 如何将"QList<T> *"指针作为信号参数传递,并在完成后将其删除?
- 编译器在C++中调用另一个函数时,在参数中查找已删除的构造函数
- 从函数参数包中删除最后一项
- 为什么没有为函数参数删除副本
- 删除 Netbeans 中的标准运行参数
- 文档在哪里说明如果参数不是从末端删除参数,则无法从QT信号插槽连接中删除参数?
- 是否允许删除以修改其参数
- 如何通过对象参数从指针矢量中删除对象和指针
- 简化可变参数模板:删除一些专用项
- 为什么删除默认参数会破坏此 constexpr 计数器?
- 使用自定义参数的过载删除操作员
- 如何查找/删除具有特定参数的结构向量的元素
- 带大小参数和不带大小参数的"运算符删除":当两者都可用时,选择哪一个?
- 如何从可变参数模板参数中删除元素
- 打开模板参数:GCC 是否删除开关
- 递归模板参数删除
- 基于模板参数删除成员