C++bind函数绑定和包装 tcy

1.1.说明:
	TR1引入bind,function 在头文件<functional>
	bind将实际值绑定到函数(或函数指针,仿函数)的一个或所有参数上
	换句化说可用现有函数或仿函数创建新的函数对象
1.2.实例:
	#include<functional>
	#include<iostream>

	constexpr double multiply(const double x1,const double x2) noexcept{return x1*x2;}

	int main(){
	const auto result1=mltiply(10.5,5.0);
	auto boundMultiplyFunctor=std::bind(multiply,10.5,5.0);
	const auto result2=boundMultiplyFunctor();
1.3.bind允许在编程中使用局部应用或偏函数应用。
	局部应用是一个过程,其中只有一部分函数参数绑定到值或变量,未绑定的参数有占位符_1,_2等替换。
	这些占位符在命名空间std::placeholders中定义
const double mul(const double x,const double y)noexcept{return x*y;}

	int main(){
		using namespace std::placeholders;
		auto mulBind10=bind(mul,_1,10.0);
		cout<<mulBind10(5.0)<<endl;
	}
1.4.局部函数应用是一种自适应计算,允许在各种情况下使用函数或仿函数
	在占位符帮助下函数参数顺序可任意
	auto mulBind=bind(mul,_2,_1);
1.5.std::Bind_helper<bool0,double(&)(double,double),const _placeholder<int2>&,const _Placeholder<int1> &>::type;

	对于这个类型不方便阅读,可用auto。
	在某些情况下必须指明类型可用类模板std::function,这是一个通用多态函数包装
	该模板可用包装任意可调用对象(普通函数,仿函数,函数指针)并管理用于存储该对象的内存

	std::function<double(double,double)> multiplyFunc=mul;
	C++lambda的引入这些模板已经很少使用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值