zoukankan      html  css  js  c++  java
  • C++中参数绑定

    1. 参数绑定

      有些泛型函数只支持一元谓词,对于某些需要两个参数的lambda函数,可以使用参数捕获列表;对于那种只在一两个地方使用的简单操作,lambda表达式是最好用的。如果我们需要在很多地方使用相同的操作,通常应该定义一个函数,而不是多次编写相同的lambda表达式,例如:

      我们用find_f调用lambda比较一个string和一个给定大小:

       

    1 find_if(words.begin(),words.end(),[sz](const string &a){return a.size()>= sz;}); 

      我们可以很容易的编写一个完成同样工作的函数check_size

      

    1 bool check_size(const string &s, string::size_type sz)
    2 {
    3     return s.size() >= sz;
    4 }

      但是,我们不能用这个函数作为find_if的一个参数,这是可以考虑bind函数,其定义为functional头文件中,bind函数相当于一个函数适配器,相当于容器中的适配器。

    2. bin函数

      bin函数的一般形式是:

    1 auto newCallable = bind(callable, arg_list)

      其中,newCallable本身是一个可调用的对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参数。即,当我们调用newCallable时,newCallable会调用callable,并传给它 arg_list中的参数 ,例如绑定check_size的sz参数

    1 //check6 是一个可调用对象,接受一个string类型的参数
    2 //并用此string和值6来调用check_size()
    3 
    4 auto check6 =bind(check_size,_1,6);

      使用bind,我们可以将原来基于lambda的find_if调用:

    1 auto wc = find_if(words.begin(),words.end(),bind(check_size,_1,sz));

      其中_1定义在命名空间placeholders中,可使用声明语句:

    1 using namespace std::placeholders

       对于绑定引用参数、const引用参数,可以用ref和cref函数,其定义在functional头文件中,具体可参考,C++ Primer 357页。

  • 相关阅读:
    DFS总结
    cmake-make-gcc(g++)
    std::function
    basic_string定义的相关string函数
    欧拉路径和欧拉回路
    正则表达式
    C++ Data Types
    关于uniapp的插槽
    关于微信H5 分享配置
    h5请求的时候总是会跨域
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6872290.html
Copyright © 2011-2022 走看看