bind()函数

头文件:#include <functional>

使用形式:bind(callable, arg_list);
callable是需要绑定的函数或函数指针(函数体,仿函数等)
arg_list是一个逗号分隔的参数列表,依次代表需要填入callable的参数
arg_list可以是占位符_1,_2,...,_n,或者实际参数。
占位符表示新生成的可调用对象newCallable的形参。

bind函数的返回值是一个可调用对象,可以通过调用该对象来执行绑定的函数。

#include <iostream>
#include <functional>

using namespace std;
using namespace std::placeholders;

void print(int a, int b, int c) {
    cout << a << " " << b << " " << c << endl;
}

int main() {
    auto f1 = bind(print, _1, _2, _3);
    f1(1, 2, 3); // 输出:1 2 3

    auto f2 = bind(print, _2, _1, 100);
    f2(1, 2); // 输出:2 1 100

    auto f3 = bind(print, _3, 100, _2);
    f3(1, 2, 3); // 输出:3 100 2

    return 0;
}

f1绑定了三个占位符,表示需要传入三个参数;f2绑定了两个占位符和一个常量100,表示需要传入两个参数,其中第一个参数在print函数中对应第二个参数,第二个参数在print函数中对应第一个参数,第三个参数固定为100;f3绑定了三个占位符和一个常量100,表示需要传入三个参数,其中第一个参数在print函数中对应第三个参数,第二个参数固定为100,第三个参数在print函数中对应第二个参数。最后,通过调用可调用对象来执行绑定的函数,输出了相应的结果。

std::placeholders

placeholders是 C++ 标准库中的一个命名空间,它包含了一组特殊的占位符对象,用于与 bind 函数一起使用。这些占位符对象允许你在绑定函数时表示某些参数是未指定的,并在稍后提供这些参数的值。

placeholders 中有以下占位符:
placeholders::_1:表示第一个未指定的参数。
placeholders::_2:表示第二个未指定的参数。

placeholders::_N:表示第 N 个未指定的参数。
通过在 bind 函数中使用这些占位符,你可以创建一个可调用的对象,该对象在调用时将使用后续提供的参数。这在很多情况下都很有用,例如当你需要在多个线程中异步调用函数,或者当你需要将函数的部分参数绑定在一起时。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部