C++ boost bind与 boost function的使用

   boost bind/function库的出现,替代了stl中的mem_fun,ptr_fun,bind1st,bin2nd等函数  //用于函数适配器

//使用示例
#include <iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>
using namespace std;
class Foo
{
public:
	void memberFunc(double d, int i, int j)
	{
//这个函数有三个参数,实际上函数传入的时候还有一个参数FOO*(this指针)(是这个函数的第一个参数)
		cout << d << endl;//打印0.5
		cout << i << endl;//打印100       
		cout << j << endl;//打印10
	}
};
int main()
{
	Foo foo;
	boost::function<void (int)> fp = boost::bind(&Foo::memberFunc, &foo, 0.5, _1, 10);

 //将右边Foo::memberFunc这样的成员函数适配成左边void fp(int)这样的一个函数接口
//将右边四个参数的接口适配成左边只有一个参数的函数接口
	fp(100);//调用fp实际上就是调用memberFunc, 100这个参数要传入memberFunch函数,至于要传进去四个参数的哪个取决bind
//取地址&Foo::memberFunc传到memberFunc第一个参数FOO*(this指针)
0.5是第二个参数double d
_1是第三个参数, _1表示传入一个占位符,表示的boost function能够接受的参数
10是第四个参数
//调用fp(100)相当于调用了(&FOO*)->memeberfunc(0.5,100,10)(是取地址的方式调用)
//因此输出的结果是打印0.5 100 10

boost::function<void (int, int)> fp = boost::bind(&Foo::memberFunc, &foo, 0.5, _1, _2);
	fp(100, 200);
//输出结果是0.5 100 200
	boost::function<void (int, int)> fp2 = boost::bind(&Foo::memberFunc, boost::ref(foo), 0.5, _1, _2);
// boost::ref(foo)相当于传啦一个引用 ,而上面, &foo表示一个指针
// 用boost::ref(foo)调用fp2(55, 66);相当于foo. memberFunc
/用/&foo调用fp(100, 200)相当于调用&FOO*)->memeberfunc(0.5,100,10)
//这两种写法是一样的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值