Logo
Section 1 / 2

std::bind 和 std::function

程序员可以使用这一对工具将函数创建并绑定到变量上。

导入

std::bind 和 std::function

程序员可以使用这一对工具将函数创建并绑定到变量上。

std::bind 和 std::function 这两个函数配合使用非常合适。std::bind 能够让你动态创建新的函数对象,而 std::function 则可以将这些临时的函数对象绑定到一个变量上。这两个工具都源自函数式编程,使用时需要包含头文件 <functional>。

1#include <iostream> 2#include <functional> 3 4// 使用占位符 _1 和 _2 5using namespace std::placeholders; 6 7using std::bind; 8using std::function; 9 10double divMe(double a, double b){ return a/b; }; 11 12int main(){ 13 std::cout << std::boolalpha; 14 function < double(double, double) > myDiv1 = bind(divMe, _1, _2); 15 function < double(double) > myDiv2 = bind(divMe, 2000, _1); 16 std::cout << (divMe(2000, 10) == myDiv1(2000, 10)) << '\n'; 17 std::cout << (myDiv1(2000, 10) == myDiv2(10)); 18}

🔑 std::bind 和 std::function 大多已不再必要
std::bind 和 std::function 最初属于 TR1 扩展,在 C++11 标准中被引入,但现在大多数情况下已不再必需。你可以使用 lambda 表达式来替代 std::bind,而多数时候也可以用自动类型推导(auto)代替 std::function。

接下来,我们将详细讨论 std::bind 和 std::function 的具体行为。

常用函数

std::bind 与 std::function 的行为