std::bind与std::function详解

本文详细介绍了C++中的std::bind和std::function的使用。std::bind用于绑定函数及对象,创建可调用对象,特别地,对于非静态成员函数,需要指定对象实例。std::function则是一个通用的函数对象容器,可以容纳任何可调用对象。文章通过示例展示了它们在静态成员函数、非静态成员函数以及虚成员函数情况下的应用,并强调了std::bind在实现行为多态中的重要性。
摘要由CSDN通过智能技术生成

std::bind

1、定义

bind(F f, T1 t1, T2 t2, ..., TN tN);

具体为:

bind(&要调用的函数,&对象, 要调用函数的参数1,要调用函数的参数2...,_1(bind函数的参数1),_2(bind函数的参数2)...)

注:如果bind的是一个非静态成员函数,第二个参数一定是一个该成员的一个指针,后面才是正常的参数。

2、bind使用形式

(1)bind(&f)()  假设f是一个全局函数,绑定全局函数并调用;

(2)bind (&A::f, A())()  假设A是一个构造函数为空的类,这个形式绑定了类的成员函数,故第二个参数需要传入一个成员(成员静态函数除外);

(3)bind (&A::f, _1)(new A()) 同上,效果是一样的,但是使用了占位符,使得没有固定的的对象,推荐。

注:使用的时候一定要注意指向的是没有this指针的函数(全局函数或静态成员函数),还是有this指针的函数。后面一种必须要用bind()函数,而且要多一个参数,因为静态成员函数与非静态成员函数的参 数表不一样,原型相同的非静态函数比静态成员函数多一个参数,即第一个参数this指针,指向所属的对象,任何非静态成员函数的第一个参数都是this指针。

3、示例

#include <stdio.h>
#include <functional>

using std::function;
using std::bind;

int func(int x,int y) {
    printf("nimei x:%d y:%d\n", x, y);
    return 3;
}
int main() {
    printf
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值