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

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