C++11 之 std::function


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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM