c++复习(六)--bind

函数绑定bind函数用于把某种形式的参数列表与已知的函数进行绑定,形成新的函数,bind就是函数适配器。

    auto fun = [](int *array,int n,int num){
        for (int i=0; i<n; i++) {
            if (array[i]>num) {
                cout<<array[i]<<ends;
            }
            cout<<endl;
        }
    };

    int array[] = {1,3,5,7,9};
    auto func1 = bind(fun, _1,_2,5);
    func1(array,sizeof(array)/sizeof(*array));

bind使用的一般形式:

    auto newfun = bind(fun,arg_list);//其中fun是一个函数,arg_list是逗号隔开的参数列表。调用newfun(),newfun()会调用fun(arg_list)。

bind的常见用法一:减少函数参数的调用,这是最常见的用法。占位符:_1,_2等,定位于placeholder中,_1是第一个参数,_2是第二个参数,以此类推!
bind的常见用法二:更改参数的调用顺序。

int fun(int a,int b);
auto newfound = bind(fun,_2,_1);//调用newfound(1,2);相当于调用fun(2,1)

ok,但是这里需要注意的一点就是类成员函数的使用。

    class Myclass{
    public:
        void fun1(void){
            cout<<"void fun1(void)"<<endl;
        }
        int fun2(int i){
            cout<<"int fun2(int i) "<<"i="<<i<<endl;
            return i;
        }
    };

//使用
    Myclass my;//使用类对象绑定
    auto fun1 = bind(&Myclass::fun1, my);
    fun1();

    Myclass * p;
    auto fun2 = bind(&Myclass::fun2, p,_1);
    int i = fun2(1);
    cout<<"i="<<i<<endl;
//因为类函数调用有一个默认的this参数

你可能感兴趣的:(C++)