bind及function的簡單舉例

當時想着一個帶參數的函數,如何將參數指定好,然後保存到一個對象中,後續直接調用這個對象即可

而不用再這個對象中再傳入參數。function的使用就需要再傳參數,比如

void GlobalFunction(int& i)
{
    ++i;
}

使用function的效果

int j = 10;
function<void(int&)> fun1 = GlobalFunction;
fun1(j);


後面考慮到bind

auto fun2 = bind(GlobalFunction, j);
fun2();

這就滿足了前面的需求了

因爲GlobalFunction是引用,上面bind使用j不會改變,如下語句又是不通的

auto fun2 = bind(GlobalFunction, &j);

考慮到ref的使用

auto fun2 = bind(GlobalFunction, ref(j));
fun2();

順利解決!


bind的原理實現以前看過一些,主要還是利用到了函數對象,函數對象中將GlobalFunction,參數j都先保存下來了,
後面調用fun2這個函數對象時,會按照參數列表進行調用即可,如果是成員函數,第一個參數必現是this指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章