衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

function與invoke的區別

程序喵大人 ? 來源:程序喵大人 ? 2023-04-27 15:13 ? 次閱讀

std::functionstd::invoke是兩個不同的東西,功能也不同。std::function 是一個函數對象的封裝器,可以用來封裝任意類型的可調用對象,比如函數指針、lambda表達式等,而 std::invoke 則是一個函數模板,用于在統一的接口下調用可調用對象。

比如,我們可以使用 std::function 來存儲一個函數指針:

#include 
#include 


void foo(int a, int b)
{
    std::cout << "foo(" << a << ", " << b << ")" << std::endl;
}


int main()
{
    std::function<void(int, int)> f = foo;
    f(1, 2);
}

	

上述代碼中,我們將函數指針 foo 封裝成了一個 std::function 對象 f,然后通過調用 f(1, 2) 來調用函數 foo

std::invoke 的作用是提供一種通用的函數調用語法,可以用統一的方式來調用各種可調用對象,而不必關心它們具體是什么類型。

比如,可以使用 std::invoke 來調用一個東西,無論這個東西是函數指針、函數對象還是成員函數指針:

#include 
#include 


void foo(int a, int b)
{
    std::cout << "foo(" << a << ", " << b << ")" << std::endl;
}


class Bar {
public:
    void bar(int a, int b) const
{
        std::cout << "Bar::bar(" << a << ", " << b << ")" << std::endl;
    }
};


int main()
{
    std::invoke(foo, 1, 2);


    Bar b;
    std::invoke(&Bar::bar, &b, 1, 2);
}

	

上面代碼,使用 std::invoke 分別調用了函數 foo 和類 Bar 的成員函數 bar,并傳遞了相應的參數

總結,std::functionstd::invoke 的使用場景是不同的。std::function 適用于需要存儲可調用對象的場景,而 std::invoke 則適用于統一調用各種不同類型的可調用對象的場景。


審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Function
    +關注

    關注

    0

    文章

    14

    瀏覽量

    9938
  • 封裝器
    +關注

    關注

    0

    文章

    7

    瀏覽量

    5903
  • invoke
    +關注

    關注

    0

    文章

    4

    瀏覽量

    2013

原文標題:function與invoke的區別

文章出處:【微信號:程序喵大人,微信公眾號:程序喵大人】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    轉載---verilog中task和function區別

    本帖最后由 hxing 于 2014-3-13 22:25 編輯 task--- 任務function --- 函數任務可以有input、output和inout,數量不限;函數只有input
    發表于 03-13 21:53

    Database Connectivity Toolkit 工具包里面Fetch Element Data VI 和Variant To Data Function區別

    我是新手,在看數據庫方面的程序,自己理解要讀取數據庫中的數據要通過Variant To Data Function轉換才能顯示,可是參考例子中Fetch Element Data VI也可以自己用來
    發表于 07-16 14:22

    LabVIEW Property Node 及 Invoke Node 教學

    大家一起來學習Property Node及Invoke Node
    發表于 08-26 15:52

    MegaCore Function User Guide

    MegaCore Function User Guide 好東西哦。網上搜集,希望對你有用。
    發表于 03-25 15:32 ?36次下載

    MATLAB的S-Function編寫指導

    S-Function(系統函數)為擴展Simulink®的性能提供了一個有力的工具。以下下節闡述了什么是S-Function,為什么可以使用S-Function,以及怎樣編寫自己的S-
    發表于 08-16 16:39 ?146次下載

    換向機能 Reversal Function

    換向機能 Reversal Function 5.3.1.1  換向閥的“通”和“位” “通”(Port)和“位”(Position)是換向閥的重要概
    發表于 10-25 14:58 ?1526次閱讀
    換向機能 Reversal <b class='flag-5'>Function</b>

    什么是Function Keys

    什么是Function Keys  功能鍵。標有F1到F12的鍵,用于通知計算機執行某項功
    發表于 01-22 14:07 ?1106次閱讀

    Mathematical_Function電路設計

    Mathematical Function電路設計
    發表于 01-11 17:41 ?0次下載

    形似亞馬遜Echo:哈曼卡頓Cortana智能音箱Invoke預計8月份上市

    在今年5月份,微軟和哈曼卡頓聯合研制的Cortana智能音箱Invoke最終發布,官網介紹到,使用Invoke,用戶將能通過Skype撥打和接聽電話,支持語音控制音樂播放和Cortana語音助手。
    發表于 07-10 09:51 ?1046次閱讀

    C++ function技術的實現與具體運用

    當std::function對象沒有初始化任何實際的可調用元素,調用std::function對象將拋出std::bad_function_call異常。
    的頭像 發表于 01-20 09:23 ?3438次閱讀

    在Java方法中調用Lua function

    Java先載入login.lua腳本并編譯,然后再獲取指定名稱的函數,無參的直接使用call()方法調用,帶參的需要通過invoke(LuaValue[])傳入參數表。
    的頭像 發表于 09-07 10:47 ?1461次閱讀

    Simulink Function模塊竟然可以這樣測

    本文介紹了使用TPT測試Simulink Function模塊的兩種方案,TPT還支持MATLAB Function的測試。
    的頭像 發表于 08-04 14:41 ?1434次閱讀
    Simulink <b class='flag-5'>Function</b>模塊竟然可以這樣測

    C++ invokefunction區別在哪?

    invoke是C++17標準引入的一個函數模板,用來調用可調用對象(Callable Object,如函數指針、函數對象、成員函數指針等)并返回結果。
    的頭像 發表于 09-04 09:11 ?868次閱讀
    C++ <b class='flag-5'>invoke</b>與<b class='flag-5'>function</b>的<b class='flag-5'>區別</b>在哪?

    verilog中function和task的區別

    非常相似,但它們在功能和使用方式上有一些重要的區別。 定義和聲明方式不同: Function:使用關鍵字"function"來定義和聲明。函數可以有一個或多個輸入參數,可以有一個返回值。函數必須在聲明之后直接定義,不能在其他函數
    的頭像 發表于 02-22 15:40 ?2037次閱讀

    verilog task和function區別

    verilog中的task和function都是用于實現模塊中的可重復的功能,并且可以接收參數和返回結果。但是它們在編寫和使用上有一些區別。下面將詳細介紹task和function區別
    的頭像 發表于 02-22 15:53 ?1185次閱讀
    澳门皇冠娱乐城| 娱乐城免费领取体验金| 利来国际网上| 百家乐官网娱乐注册就送| 网上百家乐官网是真的| 百家乐棋牌游戏皇冠网| 怎样玩百家乐赢钱| 威尼斯人娱乐 老品牌| 壶关县| 最好的百家乐官网博彩网站| 百家乐ipone| 大发888官方 黄埔网| 百家乐官网游戏软件开发| 百家乐官网平注法到656| 棋牌百家乐有稳赚的方法吗| 海丰县| 免费百家乐官网追号工具| 玩百家乐请高手指点| 锡林郭勒盟| 属虎和属猴牛人做生意| 大发888官方 论坛| 澳门百家乐官网视频| 百家乐看图赢| 凤山县| 24山阴宅评凶吉| 大发888 游戏下载| 百家乐官网赌博讨论群| 红桃K百家乐的玩法技巧和规则| 永城市| 百胜百家乐软件| bet365网址主页| 七匹狼百家乐官网的玩法技巧和规则 | 百家乐官网彩金| 大地百家乐的玩法技巧和规则| 淮南市| 百家乐投注信用最好的| 棋牌银商| 澳门百家乐官网长赢打| 百家乐节目视频| 蒙特卡罗国际网址| 百家乐最佳公式|