函数对象包装器function和bind机制

1 解决什么问题

主要是为函数提供了一种容器,将函数当做对象来使用。

2 基本用法

采用function需要包含头文件 #include <functional.h>

int test(int n){
	return n;
}
test(1);
等价于
std::function<int(int)> f = test;  
f(123);

3 C++支持四种函数的封装

1 普通函数 2 匿名函数 3 类的成员函数 4仿函数
对于普通函数上面的用法就是普通函数。

<font size="3" color="blue">匿名函数</font>
std::functional<int(int)> f2 = [](int n) -> int {
	//函数体
};
调用  f2(123);

类的成员函数

class Ctest{
public:
	int test(int){
		//业务处理
	};
};

std::functional<int(CTest*, int)> f3 = &CTest::test;
CTest t;
f3(&t, 123);

经常容易出错的是不要CTest。

仿函数
重载了()运算符的函数叫仿函数。
CTest {
public:
int operator()(int n){
//业务处理
}
};

CTest t;
t(1234);
等价于
std::functional<int(CTest*, int) f4= &CTest::operator();
CTest t;
f4(&t, 1234);

4 bind机制

对于function来说是将函数当成对象来使用,而bind机制是将函数参数和函数绑定在一起当成对象来使用。
基本用法:

int test(int a, int b, int c){
	//业务处理
};

实现一个函数参数可能比较多。

auto a = std::bind(test, 1,2,3);

test(函数)+参数绑定在一起称为一个对象来使用

调用:  a()  当成给一个对象使用

当然对于后面的参数1,2,3,也可以采用站位符号来使用。例如

auto f2 = std::bind(test, 1, std::placeholders::_1, 3);
f2(2);
或者
auto f2 = std::bind(test, std::placeholders_2, std::placeholders::_1, 3);

f2(1,2); //1对于站位符std::placeholders::_1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰恒谷

你的鼓励是我最大创作动力!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值