std::function和std::bind
生活随笔
收集整理的這篇文章主要介紹了
std::function和std::bind
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
std::function和std::bind
std::function
- 是一個函數指針
- 是一個具有operator()成員函數的類和對象
- 可被轉換成函數指針的類對象;
- 一個類成員函數指針;
C++中可調用對象的雖然都有一個比較統一的操作形式,但是定義方法五花八門,這樣就導致使用統一的方式保存可調用對象或者傳遞可調用對象時,會十分繁瑣。C++11中提供了std::function和std::bind統一了可調用對象的各種操作。
// 普通函數 int add(int a, int b){return a+b;} // lambda表達式 auto mod = [](int a, int b){ return a % b;}// 函數對象類 struct divide{int operator()(int denominator, int divisor){return denominator/divisor;} };上述表達式雖然不同但是是同一種調用形
int(int,int)std::function就可以將上述類型保存下來
std::function<int(int ,int)> a = add; std::function<int(int ,int)> b = mod ; std::function<int(int ,int)> c = divide();std::bind
可將std::bind函數看作一個通用的函數適配器,它接受一個可調用對象,生成一個新的可調用對象來“適應”原對象的參數列表。
std::bind將可調用對象與其參數一起進行綁定,綁定后的結果可以使用std::function保存。std::bind主要有以下兩個作用:
- 將可調用對象和其參數綁定成一個防函數;
- 只綁定部分參數,減少可調用對象傳入的參數。
std::bind綁定普通函數
double my_divide (double x, double y) {return x/y;} auto fn_half = std::bind (my_divide,placeholders::_1,2); std::cout << fn_half(10) << '\n';- bind的第一個參數是函數名,回隱式轉換為函數指針,所以寫成&my_divide也可以;
- 第二個參數是占位符,placeholders::_1自動匹配第一個參數
- 占位符可以有多個
- 第三個參數是默認值,調用時第二個參數默認是2;(如果調用時第二個參數你指定了,那也沒有用,還是使用2);
總結
以上是生活随笔為你收集整理的std::function和std::bind的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习入门系列(2)--机器学习概览(
- 下一篇: 一流程序员靠数学,二流程序员靠算法,低端