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)
//这两种写法是一样的