std::bind

std::bind的基本用法是,绑定一个函数对象,和一堆参数,生成一个新的可调用函数,调用该函数时,会调用绑定的函数对象,且把参数传递进去:
auto function = std::bind(fun, arg_list);
参数列表也可以不指定,先使用占位符来占位,等到真正使用的时候再根据参数传递进去。下面是几个简单的例子:

void bind_test(int num1, int num2, int num3) {
    std::cout << "num1 = " << num1 << ", num2 = " << num2 << ", num3 = " << num3 << std::endl;
}
int main()
{
    auto bind_fun1 = std::bind(bind_test, 1, 2, 4);
    bind_fun1();

    auto bind_fun2 = std::bind(bind_test, 1, std::placeholders::_1, std::placeholders::_2);
    bind_fun2(2, 3);

    auto bind_fun3 = std::bind(bind_test, 1, std::placeholders::_1, std::placeholders::_2);
    bind_fun3(8, 9, 6);
}

num1 = 1, num2 = 2, num3 = 4
num1 = 1, num2 = 2, num3 = 3
num1 = 1, num2 = 8, num3 = 9

注意看bind_fun3(8,9,6) 虽然我们传进来三个参数,但是在std::bind的时候已经有一个默认值,所以num1是1,不受后面bind_fun3参数的影响,且占位符是从_1开始的。表示新的可调用对象的第 几个参数和原函数的第几个参数进行匹配;即bind_fun3的第一个参数和原函数的第二个匹配,第2个参数和原函数的第三个匹配

bind的内部实现原理可以参考文章:https://www.cnblogs.com/xusd-null/p/3698969.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容