C++11----std::bind/std::placeholder

而 std::bind 则是用来绑定函数调用的参数的,它解决的需求是我们有时候可能并不一定能够一次性获得调用某个函数的全部参数,通过这个函数,我们可以将部分调用参数提前绑定到函数身上成为一个新的对象,然后在参数齐全后,完成调用。例如:

#include<functional>
#include<iostream>
int foo(int a, int b) {
	return a + b;
}
class Mybind {
public:
	int  operator()(int a, int b)
	{
		return a + b;
	}
};
int main() {
	// 1.将参数一:100绑定到函数 foo 上,但是使用 std::placeholders::_1 来对第一个参数进行占位
	auto bindFoo = std::bind(foo, std::placeholders::_1,  100);
	// 这时调用 bindFoo 时,只需要提供第一个参数即可
	std::cout << bindFoo(50) << std::endl;

	// 2.将参数一:100绑定到lambda上,但是使用 std::placeholders::_1 来对第一个参数进行占位
	auto  f1 = std::bind([](int a, int b)->int {return a + b; }, std::placeholders::_1, 100);
	std::cout << f1(50) << std::endl;

	// 3.将参数一:100绑定到对象上,但是使用 std::placeholders::_1 来对第一个参数进行占位
	Mybind m;
	auto  f2 = std::bind(m, std::placeholders::_1, 100);
	std::cout << f2(50) << std::endl;

	std::cin.get();
	return 0;
}


提示:注意 auto 关键字的妙用。有时候我们可能不太熟悉一个函数的返回值类型,但是我们却可以通过 auto 的使用来规避这一问题的出现。

其中:绑定参数技术多用于设计模式中的适配器模式



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值