void test1() { //do something } void test2(int i) { //do something } void test3(int i, int j) { } struct A { void test(int i, int j) { } } boost::function<void()> f; boost::function<void(int)> f1 f = boost::bind(&test1); f(); f = boost::bind(&test2, 1); f(); f = boost::bind(&test3, 1, 2); f(); f1 = boost::bind(&test3, 1, _1); f1(2);//此处要传参数因此要用f1 A a; f = boost::bind(&A::test, &a, 1, 2); f(); f1 = boost::bind(&A::test, &a, 1, _1); f1(2); //此处要传参数因此要用f1
能够看出boost::function<>模板只要提供了返回值和调用function时候传递的参数类型就好了,若是调用时候没有参数就能够boost::function<void()>通吃了sql
之前实现一个异步sql查询须要实现好多参数模板,一个继承一个,简直到最后本身都看不懂,出错调试简直是看天书。如今好了直接用个队列里面放boost::function<void(ResultSet*)>和sql语句, 查询时候bind好给回调函数和传递的参数,用一个线程取队列查询完后执行function把结果集传给回掉函数。异步