? 1. 什么是 std::function
std::function
是 C++11
引入的標準庫工具,是一個通用的函數封裝器,可以包裝以下任意可調用對象:
- 普通函數
- Lambda 表達式
- 函數指針
- 成員函數指針
- 函數對象(也叫仿函數,定義了
operator()
的類)
你可以把它理解為:
一個可以存儲和調用函數的變量。
? 2. 使用語法
#include <functional>std::function<返回值類型(參數類型列表)> 變量名;
比如:
std::function<int(int, int)> f;
表示一個接收兩個 int
參數,返回 int
的函數對象變量。
? 3. 使用示例
📌 普通函數
int add(int a, int b) { return a + b; }std::function<int(int, int)> f = add;
std::cout << f(2, 3); // 輸出 5
📌 Lambda 表達式
std::function<void()> hello = [](){ std::cout << "Hello!\n"; };
hello(); // 輸出 Hello!
📌 仿函數(函數對象類)
struct MyFunctor {void operator()() { std::cout << "I'm a functor\n"; }
};std::function<void()> f = MyFunctor();
f(); // 輸出 I'm a functor
? 4. 特點總結
特性 | 描述 |
---|---|
類型安全 | 編譯時檢查參數和返回值類型是否匹配 |
可賦值可拷貝 | std::function 可以被賦值給另一個 std::function 變量 |
可為空 | 它可以像指針一樣為空,用 if (f) 檢查是否可調用 |
抽象統一接口 | 可以讓你寫靈活的接口函數,接收任意類型的可調用對象(統一成 std::function) |