bind,bind1st,bind2nd的使用

在c++中经常用到bind等相关函数,这里仅举例说明一下相关函数的使用方法。

 先看一段简单的代码:

#include 
#include 
#include 

using namespace std;

void printInt(int a,int b,int c){
    cout<printInt(7,_2,_1);     //_1,_2,_3...均为占位符
    function aa = bind(printInt,7,placeholders::_2,placeholders::_1);

    //相当于 bb(int _1,int _2)=>printInt(_1,_2,7)
    function bb = bind(printInt,placeholders::_1,placeholders::_2,7);

    //cc相当于   cc(int _1) => aa(_1,3) =>printInt(7,3,_1)
    function cc = bind2nd(aa,3);

    //dd相当于   dd(int _1) => aa(8,_1) =>printInt(7,_1,8)
    function dd = bind1st(aa,8);

    aa(99,33);
    bb(99,33);
    cc(2);
    dd(6);

    return 0;
}

这里定义的一个函数

void printInt(int a,int b,int c);该函数分别依次打印整数a,b,c。

程序运行结果如下:

通过运行结果可以清楚的知道,bind的第一个参数是需要bind的函数,而后的参数就是调用该函数的参数顺序。_1,_2...等都是占位符,其作用是控制bind函数返回的可调用函数的参数顺序。

代码的注释中详细的解释了整个转化的过程,稍微有一些混乱,但多看几遍解释问题应该不大。

新版本推荐用bind替代bind1st和bind2nd,因为其局限性大,不够灵活。

你可能感兴趣的:(c++,STL,常见面试题)