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指针。

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