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把結果集傳給回掉函數。異步