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

C++ std::function的用法詳解

 更新時(shí)間:2021年10月11日 10:25:13   作者:zeqi1991  
這篇文章主要介紹了C++ std::function使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

類模版std::function是一種通用、多態(tài)的函數(shù)封裝。std::function的實(shí)例可以對(duì)任何可以調(diào)用的目標(biāo)實(shí)體進(jìn)行存儲(chǔ)、復(fù)制、和調(diào)用操作,這些目標(biāo)實(shí)體包括普通函數(shù)、Lambda表達(dá)式、函數(shù)指針、以及其它函數(shù)對(duì)象等。std::function對(duì)象是對(duì)C++中現(xiàn)有的可調(diào)用實(shí)體的一種類型安全的包裹(我們知道像函數(shù)指針這類可調(diào)用實(shí)體,是類型不安全的)。

通常std::function是一個(gè)函數(shù)對(duì)象類,它包裝其它任意的函數(shù)對(duì)象,被包裝的函數(shù)對(duì)象具有類型為T1, …,TN的N個(gè)參數(shù),并且返回一個(gè)可轉(zhuǎn)換到R類型的值。std::function使用 模板轉(zhuǎn)換構(gòu)造函數(shù)接收被包裝的函數(shù)對(duì)象;特別是,閉包類型可以隱式地轉(zhuǎn)換為std::function。

#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <string>
#include <algorithm>
#include <functional>
#include <memory>
using namespace std;
//聲明一個(gè)模板
typedef std::function<int(int)> Functional;
//normal function
int TestFunc(int a)
{
    return a;
}
//lambda expression
auto lambda = [](int a)->int{return a;};
//functor仿函數(shù)
class Functor
{
public:
    int operator() (int a)
    {
        return a;
    }
};
//類的成員函數(shù)和類的靜態(tài)成員函數(shù)
class CTest
{
public:
    int Func(int a)
    {
        return a;
    }
    static int SFunc(int a)
    {
        return a;
    }
};
int main(int argc, char* argv[])
{
    //封裝普通函數(shù)
    Functional obj = TestFunc;
    int res = obj(0);
    cout << "normal function : " << res << endl;
    //封裝lambda表達(dá)式
    obj = lambda;
    res = obj(1);
    cout << "lambda expression : " << res << endl;
    //封裝仿函數(shù)
    Functor functorObj;
    obj = functorObj;
    res = obj(2);
    cout << "functor : " << res << endl;
    //封裝類的成員函數(shù)和static成員函數(shù)
    CTest t;
    obj = std::bind(&CTest::Func, &t, std::placeholders::_1);
    res = obj(3);
    cout << "member function : " << res << endl;
    obj = CTest::SFunc;
    res = obj(4);
    cout << "static member function : " << res << endl;
    return 0;
}


對(duì)于各個(gè)可調(diào)用實(shí)體轉(zhuǎn)換成std::function類型的對(duì)象,上面的代碼都有,運(yùn)行一下代碼,閱讀一下上面那段簡單的代碼??偨Y(jié)了簡單的用法以后,來看看一些需要注意的事項(xiàng):

  • 關(guān)于可調(diào)用實(shí)體轉(zhuǎn)換為std::function對(duì)象需要遵守以下兩條原則:
    • 轉(zhuǎn)換后的std::function對(duì)象的參數(shù)能轉(zhuǎn)換為可調(diào)用實(shí)體的參數(shù);
    • 可調(diào)用實(shí)體的返回值能轉(zhuǎn)換為std::function對(duì)象的返回值。
  • std::function對(duì)象最大的用處就是在實(shí)現(xiàn)函數(shù)回調(diào),使用者需要注意,它不能被用來檢查相等或者不相等,但是可以與NULL或者nullptr進(jìn)行比較。

為什么要用std::function

好用并實(shí)用的東西才會(huì)加入標(biāo)準(zhǔn)的。因?yàn)楹糜茫瑢?shí)用,我們才在項(xiàng)目中使用它。std::function實(shí)現(xiàn)了一套類型消除機(jī)制,可以統(tǒng)一處理不同的函數(shù)對(duì)象類型。以前我們使用函數(shù)指針來完成這些;現(xiàn)在我們可以使用更安全的std::function來完成這些任務(wù)。

還有為什么?我也不知道還有為什么?等以后發(fā)現(xiàn)了更好的實(shí)際應(yīng)用實(shí)例再回來說為什么吧。

總結(jié)

C++11的加入,貌似讓C++變了一個(gè)語言似的,也有了Lambda表達(dá)式,好多東西都要去學(xué)習(xí),好多新的語言特性。

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語言復(fù)數(shù)的加減及輸出結(jié)構(gòu)體

    C語言復(fù)數(shù)的加減及輸出結(jié)構(gòu)體

    大家好,本篇文章主要講的是C語言復(fù)數(shù)的加減及輸出結(jié)構(gòu)體,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • C語言 ffmpeg與sdl實(shí)現(xiàn)播放視頻同時(shí)同步時(shí)鐘詳解

    C語言 ffmpeg與sdl實(shí)現(xiàn)播放視頻同時(shí)同步時(shí)鐘詳解

    使用ffmpeg和sdl實(shí)現(xiàn)播放視頻后,需要再實(shí)現(xiàn)時(shí)鐘同步才能正常的播放視頻,尤其是有音頻的情況,我們通常需要將視頻同步到音頻來確保音畫同步
    2022-09-09
  • 在iOS中給視頻添加濾鏡的方法示例

    在iOS中給視頻添加濾鏡的方法示例

    這篇文章主要介紹了在iOS中給視頻添加濾鏡的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C語言進(jìn)階:指針的進(jìn)階(4)

    C語言進(jìn)階:指針的進(jìn)階(4)

    這篇文章主要介紹了C語言指針詳解及用法示例,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價(jià)值。需要的朋友可以了解下
    2021-09-09
  • C語言從猜數(shù)字游戲中理解數(shù)據(jù)結(jié)構(gòu)

    C語言從猜數(shù)字游戲中理解數(shù)據(jù)結(jié)構(gòu)

    猜數(shù)字是興起于英國的益智類小游戲,起源于20世紀(jì)中期,一般由兩個(gè)人或多人玩,也可以由一個(gè)人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來用這個(gè)游戲案例理解數(shù)據(jù)結(jié)構(gòu)
    2022-04-04
  • C語言單鏈表實(shí)現(xiàn)圖書管理系統(tǒng)

    C語言單鏈表實(shí)現(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言單鏈表實(shí)現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實(shí)現(xiàn)簡單的計(jì)算器功能

    C++實(shí)現(xiàn)簡單的計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C?語言輸入輸出庫函數(shù)講解(最新推薦)

    C?語言輸入輸出庫函數(shù)講解(最新推薦)

    輸入輸出函數(shù)能夠讓程序和用戶或者文件進(jìn)行交互,這篇文章主要介紹了C?語言輸入輸出庫函數(shù)講解,需要的朋友可以參考下
    2025-04-04
  • C++中putchar與getchar函數(shù)的細(xì)節(jié)及運(yùn)用

    C++中putchar與getchar函數(shù)的細(xì)節(jié)及運(yùn)用

    C語言提供putchar函數(shù),用于給終端輸出一個(gè)字符;getchar函數(shù),可以從終端接收用戶輸入的一個(gè)字符,本文給大家分享C++中putchar與getchar函數(shù)的細(xì)節(jié)及運(yùn)用,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • 深入解析C++設(shè)計(jì)模式編程中解釋器模式的運(yùn)用

    深入解析C++設(shè)計(jì)模式編程中解釋器模式的運(yùn)用

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中解釋器模式的運(yùn)用,解釋器模式給定一個(gè)語言,定義它的文法的一種表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該表示來解釋語言中的句子,需要的朋友可以參考下
    2016-03-03

最新評(píng)論

四平市| 临城县| 花垣县| 阳城县| 孝义市| 滨海县| 银川市| 沅陵县| 吉木萨尔县| 囊谦县| 平遥县| 滨州市| 手机| 周至县| 通海县| 永修县| 台南市| 江山市| 枣阳市| 遂川县| 石景山区| 清水县| 安西县| 凤山市| 元江| 佛冈县| 广西| 琼结县| 开化县| 莱州市| 西乌珠穆沁旗| 郯城县| 新晃| 巴楚县| 平遥县| 望城县| 根河市| 保康县| 天柱县| 宁乡县| 昔阳县|