std::function是函數模板類(是一個類);std::bind是函數模板(是一個函數);
有的人呢,std::function是模板類,“函數”這兩個字都不敢加,我都不知道是為什么,我要把它加上,如果我沒有意識到加上就是錯誤的話,您可以提示我!std::function,std::bind在是C++11中的新特性。包含在#include <functional> 中。以前沒有這個類的時候,我們在想定義一個回調函數指針,非常的麻煩。我們通常這樣的定義:
typedef void(*ptr)(int,int),int(*ptr)(void),這里的ptr就是一個函數指針。
函數指針可以改變函數的指向,所以使用起來方便。至於為什么要用函數指針,而不直接調用函數呢,僅僅是為了方便嗎?我現在也說不好,但是我后面的文章一定會介紹它。
而使用了std::function這個類的時候,我們可以這樣使用。例如:
std::function<void(int ,int)> a;
std::function<int()> b;這樣看起來是不是顯得更加的清楚明了呢?
實例舉例:

上面用std::functon定義了3個對象,每一個對象,它代表的是一種類型的函數對象。
這些對象可以當做指針使用,讓它們指向不同的函數,然后就可以利用這些對象執行函數的功能了!(只是為了敘述清楚) 。 注意:std::function<void(int a)> fun1 ;fun1本身是對象,用類定義的,在棧上定義的就是對象呀,不是指針對象,是實實在在的對象,但是功能是指針,因為 fun2 = StaticFun; fun2("hello");這里的StaticFun就是函數名稱,函數名稱不就是一個地址,一個指針嘛!
上面的std::function可以指向全局的函數,靜態的全局函數,lamada表達式,但是我們可以使用它指向類中的成員函數嗎? 實驗一下就明白了!
--------------------- 本文來自 清新的世界 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/yjhdxflqm/article/details/50486969?utm_source=copy
