std::bind用于绑定函数和参数生成新可调用对象,如auto f = std::bind(print_sum, 5, _1);绑定首参为5,调用f(10)等价于print_sum(5,10);成员函数绑定需传对象指针,如std::bind(&Calculator::add, &calc, _1, _2);但lambda更推荐,如[&](int b){ print_sum(5, b); }替代前者,[&calc](int a, int b){ return calc.add(a,b); }替代成员函数绑定;相比bind,lambda可读性更强、性能更优、调试更易、灵活性更高,尤其在嵌套场景下lambda如[&](auto& x, auto& y){ return f(g(x), h(y)); }远比std::bind(f, std::bind(g, _1), std::bind(h, _2))清晰;尽管std::bind仍适用于部分回调适配场景,现代C++中lambda已成为首选方案。

在C++中,std::bind 是一个用于绑定函数对象和参数的工具,它能生成一个新的可调用对象。但随着 C++11 引入 lambda 表达式,很多原本使用 std::bind 的场景现在更推荐使用 lambda。下面介绍如何使用 std::bind 绑定参数,并对比其与 lambda 的替代方案。
std::bind 基本用法
std::bind 可以将函数的部分参数预先绑定,生成一个接受剩余参数的新函数对象。它定义在
例如,有一个普通函数:
#include <functional>
#include <iostream>
void print_sum(int a, int b) {
std::cout << a + b << std::endl;
}
登录后复制
使用 std::bind 绑定第一个参数:
立即学习“C++免费学习笔记(深入)”;
auto f = std::bind(print_sum, 5, std::placeholders::_1); f(10); // 输出 15,相当于 print_sum(5, 10)
登录后复制
其中 std::placeholders::_1 表示调用新函数时传入的第一个参数。
绑定成员函数
绑定类的成员函数需要额外传递对象指针或引用作为第一个参数:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~