std::function与std::bind

std::function

是一个函数包装类模板,该函数包装器模板能包装任何类型的可调用元素(函数、函数指针、类成员函数指针或者任意类型的函数对象(比如定义了 operator()的类对象实例 ))。std::function对象可以被拷贝和转移。
代码示例

#include<iostream>
#include<functional>

int g_minus(int i, int j){ return i - j; }

template <class T>
T t_minus(T i, T j){
    return i - j;
}

auto l_minus = [](int i, int j) {
    return i - j;
};

class minus{
    public:
    int operator()(int i, int j ){
        return i - j;
    }
};

void main(){
    std::function<int(int,int)> f1= g_minus;  //包装普通函数
    std::function<int(int,int)> f2= t_minus<int>; //包装模板函数
    std::function<int(int,int)> f3= l_minus ; //lambda表达式
    minus m;
    std::function<int(int,int)> f4 = m; //包装函数对象
    std::cout << f1(2, 1) << f2(2, 1) << f3(2, 1) << f4(2, 1) << std::endl; //输出1111
    system("pause");
}

std::bind

std::bind用来将可调用对象与其参数一起进行绑定。绑定后可以使用std::function进行保存。
1、将可调用对象与其参数绑定成一个仿函数。
2、可绑定部分参数。
在绑定部分参数的时候,通过使用std::placeholders来决定空参数将会是调用发生时的第几个参数。

#include <iostream>
#include <functional>

class A{
public:
    void print(int x, int y){
        std::cout << x << "  " << y << std::endl;
    }
    int i {0};
}; 

void main(){
    A a;
    std::function<void(int,int)> f1 = std::bind(&A::print,&a,std::placeholders::_1,std::placeholders::_2);//绑定成员函数,保存为仿函数
    f1(1,2);
    std::function<int&(void)> f2 = std::bind(&A::i,&a);//绑定成员变量
    f2() = 100; //对a的成员i进行赋值
    std::cout<< a.i << std::endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值