#include <iostream>
#include <boost/bind.hpp>
#include <boost/function.hpp>
class Test
{
public:
void test()
{
std::cout<<"test"<<std::endl;
}
void test1(int i)
{
std::cout<<"test1:"<<i<<std::endl;
}
void test2(int a,int b)
{
std::cout<<"test2:a:"<<a<<" b:"<<b<<std::endl;
}
};
int main()
{
Test t;
boost::function<void()> f1; // 无参数,无返回值
f1 = boost::bind(&Test::test, &t);
f1(); //调用t.test();
f1 = boost::bind(&Test::test1, &t, 2);
f1(); // 调用 t.test1(2);
boost::function<void(int)> f2;
f2 = boost::bind(&Test::test1,&t,_1);
f2(3); //调用t.test1(3)
boost::function<void(Test*)> f3;
f3 = boost::bind(&Test::test1, _1,4);
f3(&t); //调用t.test1(4)
boost::bind(&Test::test2, _1,5,6)(&t); //test2:a:5 b:6
boost::bind(&Test::test2, &t,_1,8)(7); //test2:a:7 b:8
boost::bind(&Test::test2, &t,_1,_2)(9,10); //test2:a:9 b:10
boost::bind(&Test::test2, &t,11,_1)(12); //test2:a:11 b:12
return 0;
}