最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年07月30日 10:00:55   作者:tycoon3  
這篇文章主要介紹了C++11 學(xué)習(xí)筆記之std::function和bind綁定器,本文給大家介紹的非常詳細,對大家的學(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)用對象?,F(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)用的目標實體進行存儲、復(fù)制和調(diào)用操作,它也是對 C++中現(xiàn)有的可調(diào)用實體的一種類型安全的包裹(相對來說,函數(shù)指針的調(diào)用不是類型安全的),換句話說,就是函數(shù)的容器。當我們有了函數(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++使用適配器模式模擬實現(xiàn)棧和隊列

    C++使用適配器模式模擬實現(xiàn)棧和隊列

    不論是C語言還是C++,我們都用其對應(yīng)的傳統(tǒng)寫法對棧和隊列進行了模擬實現(xiàn),現(xiàn)在我們要用新的方法模擬實現(xiàn)棧和隊列,這個新方法就是適配器模式,文章通過代碼示例和圖文介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • Linux系統(tǒng)下C語言中的標準IO總結(jié)

    Linux系統(tǒng)下C語言中的標準IO總結(jié)

    最近用到了C語言的標準IO庫,由于對其中的一些細節(jié)不是非常清楚,導(dǎo)致了許多Bug,花了好長時間來調(diào)試,所以在此做個筆記,這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)下C語言中標準IO的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • c語言中if 語句的作用范圍示例代碼

    c語言中if 語句的作用范圍示例代碼

    if語句的作用范圍只有緊跟if的第一條表達式,下面的示例將告訴你,感興趣的朋友可以了解下
    2013-09-09
  • Qt實現(xiàn)模糊匹配功能的實例詳解

    Qt實現(xiàn)模糊匹配功能的實例詳解

    對于瀏覽器的使用,我想大家一定不會陌生吧,輸入要搜索的內(nèi)容時,會出現(xiàn)相應(yīng)的匹配信息。本文就來用Qt實現(xiàn)模糊匹配功能,感興趣的可以了解一下
    2022-10-10
  • 解讀C++11 原生字符串

    解讀C++11 原生字符串

    這篇文章主要介紹了C++11 原生字符串的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++11,感興趣的朋友可以了解下
    2020-08-08
  • Python擴展C/C++庫的方法(C轉(zhuǎn)換為Python)

    Python擴展C/C++庫的方法(C轉(zhuǎn)換為Python)

    這篇文章主要介紹了Python擴展C/C++庫的方法(C轉(zhuǎn)換為Python),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • C++使用tinyxml庫處理XML文件

    C++使用tinyxml庫處理XML文件

    TinyXML是一個開源的解析XML的解析庫,能夠用于C++,能夠在Windows或Linux中編譯,這個解析庫的模型通過解析XML文件,然后在內(nèi)存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹,本文為大家介紹的是使用tinyxml庫處理XML文件,需要的可以參考一下
    2023-07-07
  • 基于C語言模擬實現(xiàn)人生重開模擬器游戲

    基于C語言模擬實現(xiàn)人生重開模擬器游戲

    人生重開模擬器是前段時間非?;鸬囊粋€小游戲,所以本文我們將一起學(xué)習(xí)使用c語言寫一個簡易版的人生重開模擬器,感興趣的小伙伴可以了解下
    2024-02-02
  • 利用OpenCV實現(xiàn)綠幕視頻背景替換

    利用OpenCV實現(xiàn)綠幕視頻背景替換

    這篇文章主要介紹了如何利用OpenCV實現(xiàn)綠幕視頻背景替換功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)OpenCV有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法

    C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法

    這篇文章主要介紹了C++使用MySQL-Connector/C++連接MySQL出現(xiàn)LNK2019錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論

大足县| 游戏| 蓝田县| 平凉市| 赫章县| 平山县| 海盐县| 远安县| 延寿县| 康平县| 花垣县| 怀来县| 荆门市| 景洪市| 博乐市| 浦县| 托克托县| 博客| 江都市| 南京市| 深圳市| 洪泽县| 马龙县| 姜堰市| 句容市| 花莲市| 青神县| 腾冲县| 长春市| 海宁市| 秭归县| 绥化市| 新化县| 榆林市| 济阳县| 全椒县| 黑山县| 连南| 武安市| 岚皋县| 卢氏县|