日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++11 std::bind 和 std::placeholder

發(fā)布時間:2024/10/14 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++11 std::bind 和 std::placeholder 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
@time 2019-07-07 @author Ruo_Xiao

std::bind 則是用來綁定函數調用的參數的, 它解決的需求是我們有時候可能并不一定能夠一次性獲得調用某個函數的全部參數,通過這個函數, 我們可以將部分調用參數提前綁定到函數身上成為一個新的對象,然后在參數齊全后,完成調用。

std::placeholder,當分批付給函數參數的過程中,如果還沒有賦值的參數,使用 std::placeholder 進行占位,意思時該位置的參數現在還不清楚,后期再賦值。

#include <functional> #include <iostream>void foo(int a, int b, int c) {std::cout << "a = " << a << " b = " << b << " c = " << c << std::endl; } int main() {// 將參數 2,3 綁定到函數 foo 參數 b 和 c 上,但是使用 std::placeholders::_1 來對第一個參數進行占位。auto bindFoo = std::bind(foo, std::placeholders::_1, 2, 3);// 這時調用 bindFoo 時,只需要提供第一個參數即可bindFoo(1);return 0; }

下面是圖解 bind 函數部分。

1、bind?可以用來將用戶提供的需要一個參數的函數轉換成不需要參數的函數對象。綁定的值(在這個例子中是 123)存儲在函數對象內并且會被自動傳遞給用戶指定的函數。

2、參數綁定也可以用于將類成員函數轉換成零參數的函數對象。猿類們都知道,非靜態(tài)成員函數需要一個隱式的?this?參數。這意味著需要綁定一個合適的類實例指針到這個函數對象。

3、相應地,隱式的?this?指針也可以顯式地傳遞給需要一個參數的函數對象。

4、函數對象經常同時使用提前綁定的參數和調用時才提供的參數。這個可以用成員函數來實現。

5、當然也可以使用非成員函數。

6、有些時候函數對象被調用時會提供多余的參數,而這些參數是目標函數不需要的。bind?會自動忽略這些多余的參數。

7、這些多余的參數不需要一定在函數對象簽名的最后。

8、最后,?bind?還允許重新組織函數對象的參數順序。

?

圖解部分轉載于:https://www.cnblogs.com/xusd-null/p/3698969.html

?

(SAW:Game Over!)

總結

以上是生活随笔為你收集整理的C++11 std::bind 和 std::placeholder的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。