C++11 bind

发布时间:2017-7-1 11:32:32编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"C++11 bind ",主要涉及到C++11 bind 方面的内容,对于C++11 bind 感兴趣的同学可以参考一下。

class foo
{
public:
    int func(int a, int b)
    {
        return a + b;
    }
};

int main()
{
    auto bf1 = std::bind(func, 10, std::placeholders::_1);
    cout<<bf1(20)<<endl;

    foo f;
    auto bf2 = std::bind(&foo::func, f, std::placeholders::_1, std::placeholders::_2);
    cout<<bf2(100, 50)<<endl;

    std::function<int (int)> bf3 = std::bind(&foo::func, f, std::placeholders::_1, 100);
    cout<<bf3(100)<<endl;

    return 0;
}

bind是这样一种机制,它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调用实体,这种机制在回调函数的使用过程中也颇为有用。

例子中:bf1是把一个两个参数普通函数的第一个参数绑定为10,生成了一个新的一个参数的可调用实体体; bf2是把一个类成员函数绑定了类对象,生成了一个像普通函数一样的新的可调用实体; bf3是把类成员函数绑定了类对象和第二个参数,生成了一个新的std::function对象。看懂了上面的例子,下面我们来说说使用bind需要注意的一些事项:

  • (1)bind预先绑定的参数需要传具体的变量或值进去,对于预先绑定的参数,是pass-by-value的
  • (2)对于不事先绑定的参数,需要传std::placeholders进去,从_1开始,依次递增。placeholder是pass-by-reference的
  • (3)bind的返回值是可调用实体,可以直接赋给std::function对象
  • (4)对于绑定的指针、引用类型的参数,使用者需要保证在可调用实体调用之前,这些参数是可用的
  • (5)类的this可以通过对象或者指针来绑定


上一篇:C++创建自己的库文件(dll文件创建和编译)
下一篇:linux平台从源码安装git【转】 - 张昺华

相关文章

关键词: C++11 bind

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款