天天看點

C++11之函數對象

目錄

1、使用場景

2、函數對象

3、std::bind

4、總結

在沒有C++11的時候,我們通常使用回調函數來完成某些特定的功能,使用回調函數就需要先聲明函數指針

示例:

這裡的 PFunction 就是一個函數指針類型,我們可以用它定義函數指針對象,傳遞到指定位置,用于回調

但C++11的 std::function 出現之後,想要實作上述功能,不再需要函數指針,使用更加簡單

使用函數對象需要包含頭檔案:

函數對象通過重載 () 實作

如上,MyClass 類中重載 () 符号,調用如下:

myClass 對象就是一個類函數對象

如上,fun 對象就是一個函數對象,它的傳回值是 int,需要一個 int 類型的參數

std::function 也可以用在 lambda 上

如上例可以看出,std::function 隻是儲存了函數,使用時仍然需要調用傳參

如果希望傳遞類成員函數,可以使用STL提供的另一種方法: std::bind

上面的 std::function 定義函數對象,但是沒有綁定函數,也沒有綁定參數,std::bind 方法傳回一個函數對象,綁定參數和函數

上例中,bind 對象綁定了函數 Function,以及兩個參數,調用時不需要再次傳參。也可以使用stl的占位符來預留參數位置

也可以使用成員函數,但是必須且傳遞的第一個參數必須是對象指針

輸出

C++11 的函數對象用在需要使用函數指針的地方,替代之

繼續閱讀