std::function与std::bind

Posted 追风弧箭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

以上是关于std::function与std::bind的主要内容,如果未能解决你的问题,请参考以下文章

std::function与std::bind

std::function与std::bind

std::function与std::bind使用总结

c++ std::bind 如何返回分配给 std::function 的值?

C++11 std::bind函数,std::function函数

C++11新特性应用--实现延时求值(std::function和std::bind)