C++11 std::function 和 std::bind 实现函数回调功能(转载)

https://blog.csdn.net/itworld123/article/details/95038095?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare

 

https://blog.csdn.net/p942005405/article/details/84760715?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.compare

 

这两篇文章是我找出来讲的比较清晰的,供大家参考讨论

 

然后有一个问题,上面第二篇博客没太说清楚

他这里说的表示绑定函数 fun 的第三个参数为 3,而fun 的第一,二个参数分别有调用 f3 的第二,一个参数指定的意思是:

将常量3在bind时放到了第三个参数的位置,然后对于fun函数来说就只剩了前两个参数没有指定,采用了placeholders::_n的写法,然后在进行调用的时候,传入了1和2,这里的2就对应placeholders::_1,1则对应placeholders::_2,所以如果把3写在最前面,那么输出的结果就是3,2,1了

同理,在下面的

auto f4 = std::bind(fun_2, n, placeholders::_1);
    f4(m);

在这个例子中,由于bind时把n写在了第一位,所以n就是实际传入的参数a,然后剩下的参数由调用时指定,剩下的参数只剩了一个,所以自然而然的对应了placeholders::_1,并不是说与placeholders::_1对应位置的就一定是整个函数的第一个参数,而是剩余参数的第一个参数,这里bind时就指定了一个m进去,所以剩余的参数就成了一个 int &b

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章