在我之前的博客讓類(lèi)成員函數(shù)指針成為可調(diào)用對(duì)象里有提到bind函數(shù)適配器,現(xiàn)在在這里介紹一下。
創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比府谷網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式府谷網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋府谷地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴(lài)。適配器可以讓某一個(gè)看上去像另一個(gè)行為,比如棧、隊(duì)列等,底層使用鏈表去完成功能,我們通過(guò)操作底層鏈表去實(shí)現(xiàn)棧、隊(duì)列等的行為。bind是函數(shù)適配器,通過(guò)bind返回的可調(diào)用對(duì)象去完成指定函數(shù)的功能。
bind的頭文件是
使用例子:
// main.cpp #include#include using namespace std::placeholders; using std::less; using std::cout; using std::endl; int main() { // less 是函數(shù)類(lèi)模板,less ()返回一個(gè)臨時(shí)值,可作為可調(diào)用對(duì)象,通過(guò)重載調(diào)用運(yùn)算符調(diào)用 auto f = bind(less (),2,_1); // bind里2為可調(diào)用對(duì)象的第一個(gè)參數(shù),_1為可調(diào)用對(duì)象的第二個(gè)參數(shù),以此類(lèi)推 cout << f(3) << endl; // 此處3對(duì)應(yīng)bind里的_1,等價(jià)于less ()(2,3),即2與3比較大小 return 0; }
_1、_2、...、_29等為命名空間std::placeholders的成員(在頭文件里從_1到_29,可使用29種參數(shù),在平常的編程里已經(jīng)足夠了,可通過(guò)std::placeholders::_n使用),可以接收外部的實(shí)參作為指定可調(diào)用對(duì)象的某個(gè)參數(shù),bind里第二個(gè)開(kāi)始的參數(shù)順序?yàn)榭烧{(diào)用對(duì)象的參數(shù)順序,_n形式為外部的實(shí)參,通過(guò)bind返回的可調(diào)用對(duì)象傳入:
如:auto fnt = bind(function,_2,2,"3",_2,_1);里(看上去有些復(fù)雜),等價(jià)于function(_2,2,"3",_2,_1);調(diào)用,而_1、_2需要bind返回的fnt接收,如果有fnt(x,y);則等價(jià)于function(y,2,"3",y,x);此時(shí)_1為x,_2為y。
bind的使用環(huán)境,如傳入可調(diào)用對(duì)象的參數(shù)過(guò)多時(shí),可以通過(guò)bind指定一個(gè)或幾個(gè)已知的參數(shù),然后其他的參數(shù)在使用時(shí)指定,如果使用less
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。