std::function Lambda 表達式的本質是一個函數對象。當 Lambda 表達式的捕獲列表為空時,Lambda 表達式還能夠作為一個函數指針進行傳遞,例如: #include using foo = void(int); // 定義函數指針, using 的使用見上一節中的別名語法vo... ...
std::function
Lambda 表達式的本質是一個函數對象。
當 Lambda 表達式的捕獲列表為空時,Lambda 表達式還能夠作為一個函數指針進行傳遞,例如:
#include
<iostream> |
上面的代碼給出了兩種不同的調用形式:
- 將 Lambda 作為函數指針傳遞進行調用
- 直接調用 Lambda 表達式
在 C++11 中統一了這些概念,將能夠被調用的對象的類型,統一稱之為可調用類型,而這種類型,便是通過std::function 引入的。
C++11 std::function 是一種通用、多態的函數封裝,可以對任何可調用目標實體進行存儲、複製和調用操作。
它也是對 C++中現有的可調用實體的一種類型安全的包裹(相對來說,函數指針的調用不是類型安全的),換句話說,就是函數的容器。
當我們有了函數的容器之後便能夠更加方便的將函數、函數指針作為對象進行處理。
例如:
#include
<functional> |
std::bind/std::placeholder
std::bind 是用來綁定函數調用參數的,它解決的需求是:
我們有時候可能並不一定能夠一次性獲得調用某個函數的全部參數。
通過這個函數,我們可以將部分調用參數提前綁定到函數身上成為一個新的對象,然後在參數齊全後,完成調用。
例如:
int
foo(int
a, int
b, int
c) { |