std::bind 创建函数对象的绑定器,将函数的参数绑定到特定值从而创建一个新的可调用对象

std::bind 创建函数对象的绑定器,将函数的参数绑定到特定值从而创建一个新的可调用对象

std::bind是C++标准库中的一个函数模板,用于创建函数对象(函数指针或成员函数指针)的绑定器。它可以将函数的参数绑定到特定的值,从而创建一个新的可调用对象。

std::bind函数接受一个可调用实体作为第一个参数,然后是一系列要绑定到可调用实体的参数。它返回一个新的可调用对象,当调用该对象时,将使用绑定的参数调用原始的可调用实体。

std::bind的语法如下:

std::bind(Function&& f, Args&&... args)

其中,Function是要绑定的函数或成员函数的类型,args是要绑定的参数。

示例用法:

#include <functional>
#include <iostream>

void foo(int a, int b) {
    std::cout << "Sum: " << a + b << std::endl;
}

class Bar {
public:
    void barFunc(int a, int b) {
        std::cout << "Product: " << a * b << std::endl;
    }
};

int main() {
    auto bindFoo = std::bind(foo, 10, 20);
    bindFoo();  // 输出:Sum: 30

    Bar barObj;
    auto bindBar = std::bind(&Bar::barFunc, &barObj, 5, 6);
    bindBar();  // 输出:Product: 30

    return 0;
}

在上述示例中,我们使用std::bind分别创建了两个绑定器bindFoo和bindBar。bindFoo绑定了函数foo,并将参数10和20绑定到了该函数上,所以调用bindFoo()时会输出Sum: 30。

bindBar绑定了类Bar的成员函数barFunc,并将参数5和6绑定到了该成员函数上,所以调用bindBar()时会输出Product: 30。
注意,对于成员函数的绑定,需要使用成员函数指针和对象指针。

std::bind也可以用于在类内中,将回调函数作为函数参数时进行绑定:

AddConnection(_a, std::bind(&class::method,this,std::placeholders::_1), b, c);

其中,std::bind(&class::method,std::placeholders::_1)为创建的新的可调用对象,class为该类的类名,method为类内的一个自定义非静态成员函数。

在C++中,类内非静态成员函数默认会有第一个参数为this,因此将method的第一个参数绑定到this,并使用std::placeholders::_1保留第二个参数的位置,这个保留的参数会在调用时调用提供的参数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值