C++ bind和placeholders

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 函数中使用这些占位符,你可以创建一个可调用的对象,该对象在调用时将使用后续提供的参数。这在很多情况下都很有用,例如当你需要在多个线程中异步调用函数,或者当你需要将函数的部分参数绑定在一起时。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 14:16:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 14:16:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 14:16:02       57 阅读
  4. Python语言-面向对象

    2024-07-18 14:16:02       68 阅读

热门阅读

  1. 力扣LCR184.设计自助结算系统

    2024-07-18 14:16:02       19 阅读
  2. SpringBoot 实现整合kafka的简单使用

    2024-07-18 14:16:02       21 阅读
  3. 模乘逆元计算器

    2024-07-18 14:16:02       21 阅读
  4. 算法面试题六

    2024-07-18 14:16:02       21 阅读
  5. c++数据结构——栈

    2024-07-18 14:16:02       20 阅读
  6. 搞定前端面试题——TCP和UDP!!!

    2024-07-18 14:16:02       20 阅读
  7. vue2路由跳转是异步的

    2024-07-18 14:16:02       20 阅读
  8. 日有所增,不见其长

    2024-07-18 14:16:02       19 阅读
  9. Python面试整理-Python的数据类型,分别有哪些?

    2024-07-18 14:16:02       19 阅读