boost bind和function實現動態不定參數綁定原來如此簡單

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

相關文章
相關標籤/搜索