std::bind 可绑定函数、参数和成员函数,生成新可调用对象;通过占位符 _1、_2 等指定参数顺序,适用于预设参数、调整调用签名或配合 STL 算法使用,如 std::for_each 中绑定成员函数;虽 lambda 更直观高效,但 bind 在泛型编程中仍有价值。

std::bind 是 C++11 引入的一个强大工具,用于将函数、函数对象或成员函数与其参数进行绑定,生成一个新的可调用对象。它允许你“预设”部分参数,延迟执行函数,或者适配函数签名以符合特定的调用需求。
基本语法与使用方式
std::bind 的基本形式如下:
std::bind(function, arg1, arg2, ...)其中 function 是要绑定的函数,arg1、arg2 等是传递给该函数的参数。这些参数可以是具体的值,也可以是占位符(placeholder),表示在实际调用时再传入。
例如,有一个简单的加法函数:
立即学习“C++免费学习笔记(深入)”;
int add(int a, int b) {return a + b;
}
你可以使用 std::bind 固定其中一个参数:
auto add5 = std::bind(add, 5, std::placeholders::_1);int result = add5(3); // 相当于 add(5, 3),结果为 8
这里 std::placeholders::_1 是一个占位符,表示调用 add5 时传入的第一个参数将被替换到这个位置。
占位符的作用机制
占位符定义在命名空间 std::placeholders 中,包括 _1、_2、_3……最多支持到 _29(标准规定至少支持到 _1)。它们代表最终调用时传入的第几个参数。
例如:
auto func = std::bind(add, std::placeholders::_2, std::placeholders::_1);当你调用 func(10, 20) 时,_2 对应 20,_1 对应 10,所以实际执行的是 add(20, 10)。
还木有评论哦,快来抢沙发吧~