日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【C++】bind参数绑定 P354(通用的函数适配器)

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】bind参数绑定 P354(通用的函数适配器) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 什么時候該使用bing ?什么時候該使用lambda?

  • 當只有少數地方調用時候使用lambda,當需要多次調用lambda時,需要定義一個函數,而不是多次編譯相同的lambda表達式。

    調用bind的一般形式為:
    auto newCallable = bind(callable,arg_list)
    callable本身是一個可調用的對象,arg_list是一個逗號分隔的參數列表,對應給定的callable的參數。即當調用newCallable時,newCallable會調用callable,并傳遞給arg_list中的參數。
    
    arg_list中的參數可能包含形如 _n 的名字,其中 n是一個整數。這些參數是“占位符”,表示newCallable的參數,它們占據了傳遞給newCallable的參數的“位置”。
    數值 n 表示生成的可調用對象中參數的位置: _1 為newCallable的第一個參數,_2為newCallable的第二個參數,依次類推。
    

    2.實例

    demo1: bind的使用實例

    	bool check_size(const string& s, string::size_type sz) {return s.size() >= sz;}string s = "hello";auto check6 = bind(check_size, std::placeholders::_1, 6);bool b1 = check6(s);	std::cout << b1 << std::endl;
    

    demo2: for_each find_if stable_sort使用實例

    vector<string> wordVec = { "the","quick","red","fox","jnmp","slow","over","the","red" };//the red fox the red jnmp slow over quickstable_sort(wordVec.begin(), wordVec.end(),[](const string& a, const string& b){return a.size() < b.size(); });vector<string>::size_type sz = 4;auto wc = find_if(wordVec.begin(), wordVec.end(),[sz](const string& a){return a.size() >= sz; });// jump std::cout << *wc << std::endl;// jnmp slow over quickauto count = wordVec.end() - wc;for_each(wc, wordVec.end(), [](const string& s) { cout << s << " "; });
    

    demo 3:通過bind 實現find_if調用check_size適配實現

    	auto wc = find_if(wordVec.begin(), wordVec.end(),bind(check_size,std::placeholders::_1,sz));
    

    3. bind 參數:bind綁定可調用對象中參數或將其重新排序

    // g 是一個有2個參數的可調用對象,f是一個可調用對象,他有5個參數
    auto g = bind(f,a,b,_2,c,_1);
    如上,生成一個新的可調用對象,它有2個參數,對別使用占位符 _2 和 _1表示,這個新的可調用對象將自己的參數作為第三個和第五個傳遞給f。f的第一個、第二個和第四個數參數分別綁定到給定的值 a,b,c上
    
    傳遞給g的參數按位置綁定到占位符。即第一個參數綁定到_1,第二個參數綁定到_2。
    
    當調用g時,其第一個參數將被傳遞給f作為最后一個參數,第二個參數將被傳遞給f作為第三個參數
    
    實際上,這個bind調用會將  g(_1,_2) 映射為 f(a,b,_2,c,_1)
    即對g的調用會調用f,用g的參數代替占位符,再加上綁定的參數a,b,c。
    
    例如: 調用g(X,Y) 映射為 f(a,b,Y,c,X)
    

    4. 用bind重排參數順序

    • 通用寫法

      bool isShorter(const string& s1, const string& s2) {return s1.size() < s2.size();
      }
      
    • lambda寫法

      stable_sort(wordVec.begin(), wordVec.end(),[](const string& a, const string& b){return a.size() < b.size(); });
      
    • bind 寫法,由短至長排序

      sort(wordVec.begin(), wordVec.end(), isShorter);
      
    • bind寫法,由長至短排序

      std::stable_sort(wordVec.begin(), wordVec.end(), std::bind(isShorter,std::placeholders::_2, std::placeholders::_1));
      

    5. 綁定引用參數

    • 5.1 默認情況下,bind那些不是占位符的參數,被拷貝到bind返回的可調用對象當中。,有時對有些綁定的參數可以采用引用的方式,或者要綁定參數的類型無法拷貝。

      錯誤實例:os不能拷貝,原因在于bind拷貝其參數,bind不能直接拷貝ostream對象

      for_each(a.begin(),a.end(),bind(print,os,_1,' '));
      

      標準庫ref函數,可以實現bind傳遞一個對象而不拷貝該對象

      for_each(a.begin(),a.end(),bind(print,ref(os),_1,' '));
      

      函數ref返回一個對象,包含給定的引用,此對象是可以拷貝的。

    • 5.2 demo2 RemapPointsInternal計算實例

        if (configuration_->threads() > 1) {tbb::parallel_for((size_t) 0,(size_t) point_centers_remapped.size(),(size_t) 1,std::bind(&Remapper::RemapPointsInternal,this,std::ref(point_centers_remapped),std::ref(point_centers),std::ref(in_out_img_extended_flag),std::ref(in_out_img_origin_flag),std::cref(forword_map_x),std::cref(forword_map_y),x_offset,y_offset,temperature_ntc,std::cref(calib_params),std::placeholders::_1));} else {for (size_t i = 0; i < point_centers_remapped.size(); ++i) {RemapPointsInternal(point_centers_remapped,point_centers,in_out_img_extended_flag,in_out_img_origin_flag,forword_map_x,forword_map_y,x_offset,y_offset,temperature_ntc,calib_params,i);}}
      
    • 5.3 demo3 描述子計算實例ComputeDescriptorsInternal

       if (configuration_->threads() > 1) {tbb::parallel_for((size_t) 0,(size_t) points.size(),(size_t) 1,std::bind(&DescriptorGenerator::ComputeDescriptorsInternal<PointType>,this,std::ref(points),std::ref(descriptors),std::ref(point_centers_remap),std::ref(bit_descriptors),std::ref(point_center_image),search_offsets_fxp,search_angle,coarse_quadrant,std::placeholders::_1));} else {for (size_t i = 0; i < points.size(); ++i)ComputeDescriptorsInternal(points,descriptors,point_centers_remap,bit_descriptors,point_center_image,search_offsets_fxp,search_angle,coarse_quadrant,i);}
      

    使用placeholders名字

  • 1.通過 using 語句,而不是分別聲明每個占位符 格式如下

    using namespace namespace_name
    

    實例:

    using namespace std::placeholders;
    
    / PLACEHOLDER ARGUMENTS
    namespace placeholders {_INLINE_VAR constexpr _Ph<1> _1{};_INLINE_VAR constexpr _Ph<2> _2{};_INLINE_VAR constexpr _Ph<3> _3{};_INLINE_VAR constexpr _Ph<4> _4{};_INLINE_VAR constexpr _Ph<5> _5{};........._INLINE_VAR constexpr _Ph<17> _17{};_INLINE_VAR constexpr _Ph<18> _18{};_INLINE_VAR constexpr _Ph<19> _19{};_INLINE_VAR constexpr _Ph<20> _20{};
    } // namespace placeholders
    

總結

以上是生活随笔為你收集整理的【C++】bind参数绑定 P354(通用的函数适配器)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一二区在线视频 | 处破痛哭a√18成年片免费 | 国产3级| 免费成人一级片 | 午夜精品美女久久久久av福利 | 99久久国产免费 | 国产精品午夜未成人免费观看 | 亚洲精品在线免费播放 | 亚洲精品影院在线 | 免费a级片视频 | 青春草在线视频观看 | 久久久精品久 | 视频成人免费 | 激情欧美一区二区 | 97伦伦午夜电影理伦片 | 国产午夜视频在线播放 | 国产大学生视频 | 色久影院 | 四虎影视成人 | 国产成人无码久久久精品天美传媒 | 成年人激情网站 | 国产精品一区二区在线 | 国产精品一区二区久久毛片 | 亚洲无码乱码精品国产 | 在线观看av一区二区 | 欧美日韩性生活视频 | 91精品美女| 狠狠干美女 | 91精品999 | 国精产品乱码一区一区三区四区 | 精品人妻一区二区三区四区久久 | 色一情一乱一区二区三区 | 午夜激情视频在线 | caoporm超碰 | 日本女v片 | 日韩成人欧美 | 久久超碰av | 亚洲精品在线中文字幕 | 男女瑟瑟视频 | 欧美精品久久久久久久久久 | 少妇色综合 | 性高潮视频在线观看 | 高h视频在线播放 | 成年人黄色免费网站 | 五月婷婷激情四射 | 传媒av在线 | 国产美女久久久久 | 潘甜甜在线| 三级小视频在线观看 | 午夜亚洲 | 欧美成人三级视频 | 综合久久影院 | 亚洲av成人一区二区 | 黄色aa大片 | 亚洲永久在线观看 | 久久艹影院 | 四虎影视8848hh | 免费色网 | 熟女视频一区 | 中文字字幕在线中文乱码 | 日本55丰满熟妇厨房伦 | 激情吧| 蜜桃aaa| 青青草视频播放器 | 嫩草在线播放 | 中文字幕av一区二区三区谷原希美 | 国产精品乱码一区二三区小蝌蚪 | 糖心av| 亚洲色成人www永久在线观看 | 欧美一级免费观看 | 香蕉手机网 | 91激情在线观看 | 免费看裸体网站视频 | 国产老肥熟 | 精品成人av一区二区在线播放 | 久久精品福利 | 日日噜噜噜噜久久久精品毛片 | 国产精品18久久久久久无码 | www.色午夜| 国产色婷婷一区二区三区竹菊影视 | 精品一区二区久久久久久久网站 | 国产av毛片| 午夜视频精品 | 亚洲天堂av一区二区 | 天天撸在线视频 | 欧美黄色免费视频 | 色婷婷综合成人av | 欧美mv日韩mv国产网站app | 亚洲24p | 国产a级黄色片 | 国产成人一区二区在线 | 另类ts人妖一区二区三区 | 国产成人一区在线观看 | 亚洲国产成人va在线观看天堂 | 国产人妻一区二区三区四区五区六 | 99久久精品免费看国产 | 国产小视频在线看 | 日日摸夜夜添狠狠添欧美 | 精品人妻二区中文字幕 |