导入
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 的具体行为。