当前位置: 首页 > news >正文

【C++】std::bind和std::placeholders

std::bind是C++11引入的函数适配器模板,用于创建新的可调用对象,其核心语法和功能如下

#include <functional>
auto new_callable = std::bind(callable, arg_list);
  • callable‌:可绑定对象(函数、成员函数、函数对象、lambda等)
  • arg_list‌:参数列表,支持混合固定值和占位符std::placeholders::_N

2. 参数绑定规则

  • 固定值绑定‌:直接传递值或对象,调用时无需再指定
    auto bound = std::bind(func, 10, 20);  // 绑定两个固定参数
    bound();  // 等价于 func(10, 20)
    

    占位符绑定‌:通过std::placeholders::_1_2等动态指定参数位置

    auto bound = std::bind(func, _1, _2);  // 调用时需传入两个参数
    bound(30, 40);  // 等价于 func(30, 40)
    

    3. 成员函数绑定

    需显式传递对象指针或引用,并指定占位符

    class MyClass {
    public:void method(int x) { /*...*/ }
    };
    MyClass obj;
    auto bound = std::bind(&MyClass::method, &obj, _1);  // 绑定对象和成员函数
    bound(42);  // 等价于 obj.method(42)
    

    4. 参数重排与适配

    通过占位符调整参数顺序

    void connect(string ip, int port);
    auto reversed = std::bind(connect, _2, _1);  // 参数顺序反转
    reversed(8080, "127.0.0.1");  // 等价于 connect("127.0.0.1", 8080)
    

    5. 引用参数绑定

    使用std::ref避免拷贝

    void update(int& val);
    int x = 0;
    auto bound = std::bind(update, std::ref(x));  // 绑定引用
    bound();  // x会被修改
    

    6. 返回值类型(可选)

    通过模板参数指定返回类型(需C++17起支持)

    auto bound = std::bind<int>(func, _1);  // 显式指定返回int类型
    

注意事项

  • 性能‌:相比直接调用或lambda有额外开销
  • 可读性‌:复杂绑定逻辑可能降低代码可读性,推荐优先使用lambda
  • 类型安全‌:需确保调用时参数匹配绑定签名

相关文章:

  • 盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
  • 【Java】Ajax 技术详解
  • 基于当前项目通过npm包形式暴露公共组件
  • 检查项目中的依赖是否有更新——npm outdated
  • 基于SpringBoot实现的汽车资讯网站设计与实现【源码+文档】
  • 【ubutnu 24.04 】 nomachine 安装
  • 第21节 Node.js 多进程
  • 安宝特案例丨又一落地,Vuzix AR眼镜助力亚马逊英国仓库智能化升级!
  • rm视觉学习1-自瞄部分
  • Latex vscode安装、配置与使用-Windows
  • Spring是如何解决Bean的循环依赖:三级缓存机制
  • 比较数据迁移后MySQL数据库和达梦数据库中的表
  • Elasticsearch的索引
  • VMware启动不支持虚拟化的解决方案!
  • #Vue3篇:透传 Attributes---$attrs插槽propemit
  • 密码是什么(三):多表代替密码
  • 1991-2024年上市公司个股换手率数据
  • C++模版初阶
  • 存储性能委员会(SPC)
  • 管理学院权限管理系统开发总结
  • 集团网站建设特色/b站推广网站2024年不用下载
  • 佛山网站建设骏域网站建设专家/seo零基础教学
  • 做个网站要多少钱/海外社交媒体营销
  • 官方网站建设报价表/seo外链收录
  • 做网站被用作非法用途/网站优化排名公司哪家好
  • 威海住房和城乡建设局官方网站/百度在线搜索