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的主要内容,如果未能解决你的问题,请参考以下文章
c++ std::bind 如何返回分配给 std::function 的值?