欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++11 學(xué)習(xí)筆記之std::function和bind綁定器

 更新時間:2021年07月30日 10:00:55   作者:tycoon3  
這篇文章主要介紹了C++11 學(xué)習(xí)筆記之std::function和bind綁定器,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

std::function

      C++中的可調(diào)用對象雖然具有比較統(tǒng)一操作形式(除了類成員指針之外,都是后面加括號進行調(diào)用),但定義方法五花八門。為了統(tǒng)一泛化函數(shù)對象,函數(shù)指針,引用函數(shù),成員函數(shù)的指針的各種操作,讓我們可以按更統(tǒng)一的方式寫出更加泛化的代碼,C++11推出了std::function。

  std::function是可調(diào)用對象的包裝器。它是一個類模板,可以容納除了類成員(函數(shù))指針之外的所有可調(diào)用對象。通過指定它的模板參數(shù),它可以用統(tǒng)一的方式處理函數(shù),函數(shù)對象,函數(shù)指針,并允許保存和延遲執(zhí)行它們。

1.1 可調(diào)用對象(Callable Objects)

可調(diào)用對象有如下幾種:

  • 函數(shù)指針
  • 具有operator()成員函數(shù)的類對象(仿函數(shù))
  • 可被轉(zhuǎn)換為函數(shù)指針的類對象
  • 類成員(函數(shù))指針

以上涉及的對象可以像一個函數(shù)一樣做調(diào)用操作,統(tǒng)稱為可調(diào)用對象。現(xiàn)在,C++11通過提供std::function和std::bind統(tǒng)一了可調(diào)用對象的各種操作。

1.2 可調(diào)用對象包裝器——std::function

C++中的可調(diào)用對象雖然具有比較統(tǒng)一操作形式(除了類成員指針之外,都是后面加括號進行調(diào)用),但定義方法五花八門。為了統(tǒng)一泛化函數(shù)對象,函數(shù)指針,引用函數(shù),成員函數(shù)的指針的各種操作,讓我們可以按更統(tǒng)一的方式寫出更加泛化的代碼,C++11推出了std::function。

  std::function是可調(diào)用對象的包裝器。它是一個類模板,可以容納除了類成員(函數(shù))指針之外的所有可調(diào)用對象。通過指定它的模板參數(shù),它可以用統(tǒng)一的方式處理函數(shù),函數(shù)對象,函數(shù)指針,并允許保存和延遲執(zhí)行它們。

#include <iostream>
#include <functional>
 
using namespace std;
 
 void func(void){
     cout << __FUNCTION__ <<endl;
 }
 
 class Foo
 {
 public:
     static int foo_func(int a){
         cout << __FUNCTION__ << "(" << a << ") ->: ";
         return a;
     }
 };
 
 class Bar
 {
 public:
     int operator()(int a){
         cout << __FUNCTION__ << "(" << a << ") ->: ";
         return a;
     }
 };
 
 int main(){
     //綁定一個普通函數(shù)
     std::function<void(void)> fry = func;
     fry();
 
     
     //綁定一個類的靜態(tài)成員函數(shù)
     std::function<int(int)> fr2 = Foo::foo_func;
     cout << fr2(123) << endl;
     
     //綁定一個仿函數(shù)
     Bar bar;
     fr2 = bar;
     cout << fr2(123) <<endl;
 
     return 0;
 }
root@ubuntu:~/c++# g++ -std=c++11 func1.cpp -o func
root@ubuntu:~/c++# ./func 
func
foo_func(123) ->: 123
operator()(123) ->: 123
root@ubuntu:~/c++#

std::function的使用方法:我們給std::function填入合適的函數(shù)簽名(即一個函數(shù)類型,只需要包括返回值和參數(shù)表)之后,它就變成了一個可以容納所有這一類調(diào)用方式的“函數(shù)包裝器”。

#include <iostream>
#include <functional>
 
using namespace std;
 
 class A
 {
 public:
     A(const std::function<void()>& f) :callback_(f){}
     
     void notify(void){
         callback_();
     }
 private:
     std::function<void()> callback_;
 };
 
 class Foo
 {
 public:
     void operator()(void){
         cout <<"in " <<  __FUNCTION__<< endl;
     }
 };
 
 int main(){
     Foo foo;
     A aa(foo);
     aa.notify();
     
     return 0;
 }
"func2.cpp" 32L, 452C written                                              
root@ubuntu:~/c++# g++ -std=c++11 func2.cpp -o func
root@ubuntu:~/c++# ./func
in operator()

C++11 std::function 是一種通用、多態(tài)的函數(shù)封裝,它的實例可以對任何可以調(diào)用的目標(biāo)實體進行存儲、復(fù)制和調(diào)用操作,它也是對 C++中現(xiàn)有的可調(diào)用實體的一種類型安全的包裹(相對來說,函數(shù)指針的調(diào)用不是類型安全的),換句話說,就是函數(shù)的容器。當(dāng)我們有了函數(shù)的容器之后便能夠更加方便的將函數(shù)、函數(shù)指針作為對象進行處理。例如:lambda函數(shù)

到此這篇關(guān)于C++11 學(xué)習(xí)筆記之std::function和bind綁定器的文章就介紹到這了,更多相關(guān)C++11 std::function和bind綁定器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言大小端字節(jié)序存儲模式深入解讀

    C語言大小端字節(jié)序存儲模式深入解讀

    我們知道,當(dāng)編譯器執(zhí)行 “創(chuàng)建變量” 這一代碼時,會在內(nèi)存中開辟空間相應(yīng)的空間來存儲變量值。而對于整型變量而言,變量值又是以二進制補碼的形式存放的
    2022-09-09
  • 淺談時間戳與日期時間互轉(zhuǎn)C語言

    淺談時間戳與日期時間互轉(zhuǎn)C語言

    下面小編就為大家?guī)硪黄獪\談時間戳與日期時間互轉(zhuǎn)C語言。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Matlab利用垂距法實現(xiàn)提取離散坐標(biāo)數(shù)據(jù)特征點

    Matlab利用垂距法實現(xiàn)提取離散坐標(biāo)數(shù)據(jù)特征點

    垂距法是指根據(jù)中間頂點到其前、后兩相鄰頂點連線的距離的大小,來確定是否保留該頂點的一種線要素頂點壓縮算法。本文將利用這一算法實現(xiàn)提取離散坐標(biāo)數(shù)據(jù)特征點,需要的可以參考下
    2022-04-04
  • c++ 實現(xiàn)文件逐行讀取與字符匹配

    c++ 實現(xiàn)文件逐行讀取與字符匹配

    這里嘗試通過C++來實現(xiàn)一個文件IO的功能,看看是否能夠比python的表現(xiàn)更好一些,感興趣的朋友可以參考下
    2021-05-05
  • Opencv分水嶺算法學(xué)習(xí)

    Opencv分水嶺算法學(xué)習(xí)

    這篇文章主要為大家詳細(xì)介紹了Opencv分水嶺算法的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言代碼實現(xiàn)簡易三子棋游戲

    C語言代碼實現(xiàn)簡易三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實現(xiàn)簡易三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 利用C語言實現(xiàn)“百馬百擔(dān)”問題方法示例

    利用C語言實現(xiàn)“百馬百擔(dān)”問題方法示例

    百馬百擔(dān)是道經(jīng)典的算法題,下面這篇文章主要給大家介紹了利用C語言實現(xiàn)“百馬百擔(dān)”問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • C++面向?qū)ο髮崿F(xiàn)萬年歷的示例代碼

    C++面向?qū)ο髮崿F(xiàn)萬年歷的示例代碼

    本文將通過面向?qū)ο髮崿F(xiàn)一個簡單的日歷(萬年歷)效果,主要會有以下幾個模塊:模型、視圖、控制,感興趣的小伙伴可以動手嘗試一下
    2022-06-06
  • C/C++詳解實現(xiàn)二層轉(zhuǎn)發(fā)

    C/C++詳解實現(xiàn)二層轉(zhuǎn)發(fā)

    數(shù)據(jù)鏈路層是開放系統(tǒng)互連 (OSI) 模型中的第二層,該層用于通過 LAN 等單一網(wǎng)絡(luò)進行通信的節(jié)點,第二層數(shù)據(jù)包不能從一個網(wǎng)絡(luò)傳輸?shù)搅硪粋€網(wǎng)絡(luò)。而二層轉(zhuǎn)發(fā)是根據(jù)報文的目的MAC直接進行轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)過程中不用對報文的頭部做任何的修改
    2022-05-05
  • c語言文件讀寫示例(c語言文件操作)

    c語言文件讀寫示例(c語言文件操作)

    這篇文章主要介紹了c語言文件讀寫示例(c語言文件操作),需要的朋友可以參考下
    2014-02-02

最新評論