C++11函數封裝器 std::function

? 1. 什么是 std::function

std::functionC++11 引入的標準庫工具,是一個通用的函數封裝器,可以包裝以下任意可調用對象:

  • 普通函數
  • Lambda 表達式
  • 函數指針
  • 成員函數指針
  • 函數對象(也叫仿函數,定義了 operator() 的類)

你可以把它理解為:
一個可以存儲和調用函數的變量


? 2. 使用語法

#include <functional>std::function<返回值類型(參數類型列表)> 變量名;

比如:

std::function<int(int, int)> f;

表示一個接收兩個 int 參數,返回 int 的函數對象變量。


? 3. 使用示例

📌 普通函數

int add(int a, int b) { return a + b; }std::function<int(int, int)> f = add;
std::cout << f(2, 3);  // 輸出 5

📌 Lambda 表達式

std::function<void()> hello = [](){ std::cout << "Hello!\n"; };
hello();  // 輸出 Hello!

📌 仿函數(函數對象類)

struct MyFunctor {void operator()() { std::cout << "I'm a functor\n"; }
};std::function<void()> f = MyFunctor();
f();  // 輸出 I'm a functor

? 4. 特點總結

特性描述
類型安全編譯時檢查參數和返回值類型是否匹配
可賦值可拷貝std::function 可以被賦值給另一個 std::function 變量
可為空它可以像指針一樣為空,用 if (f) 檢查是否可調用
抽象統一接口可以讓你寫靈活的接口函數,接收任意類型的可調用對象(統一成 std::function)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84929.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84929.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84929.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos系統docker配置`milvus-standalone`教程

本人使用的是京東云服務器docker配置milvus 參考教程&#xff1a;https://blog.csdn.net/withme977/article/details/137270087 需要注意&#xff1a;虛擬機安裝pymilvus和docker安裝milvus版本需要對應&#xff0c;否則會出現connection失敗問題 查看虛擬機pymilvus版本&…

AI for 數據分析:技術演進與應用實踐

一、AI 數據分析的核心定義與技術演進 概念延伸&#xff1a;從傳統分析到智能分析 傳統數據分析工作&#xff0c;主要依賴人工使用 Excel、SPSS 等統計工具進行建模與分析。這種方式不僅效率較低&#xff0c;而且對專業人員的依賴度極高。而 AI 驅動的數據分析則借助機器學習…

stm32 f103c8t6仿真 串口收發測試

C8T6串口概述 STM32F103C8T6微控制器包含3個串口模塊&#xff1a; USART1 (高級串口) USART2 USART3 (部分型號可能標記為UART3) 引腳分布圖 USART1 (串口1) 基本特性 類型&#xff1a;全功能USART(通用同步異步收發器) 通信模式&#xff1a; 全雙工異步通信 單線半…

語言特性適用的場景:衛星、火箭控制系統用什么開發語言?

核心飛行控制系統開發語言 衛星、火箭及相關航天系統的軟件開發對可靠性、實時性、安全性有極高要求&#xff0c;因此語言選擇需嚴格匹配這些需求。以下是航天領域常用的編程語言及其應用場景分析&#xff1a; 一、核心飛行控制與嵌入式系統&#xff1a;C、C、Ada 航天器的核…

AI for Science:智能科技如何重塑科學研究

AI與科學研究的邂逅 人工智能&#xff08;Artificial Intelligence&#xff0c;簡稱AI&#xff09;作為一門致力于模擬人類智能的交叉學科&#xff0c;近年來已經從實驗室走向現實世界的各個角落&#xff0c;而科學研究領域正是其最具變革潛力的舞臺之一。AI的核心在于通過算法…

項目三 - 任務7:開發名片管理系統

在本次項目三的任務7中&#xff0c;我們成功開發了一個功能全面的名片管理系統。該系統采用Java語言&#xff0c;基于MVC&#xff08;模型-視圖-控制器&#xff09;架構模式&#xff0c;實現了用戶登錄、名片的增刪改查等核心功能。通過設計Card類來封裝名片信息&#xff0c;Ca…

MySQL 8.0 OCP 英文題庫解析(十八)

Oracle 為慶祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免費考取原價245美元的MySQL OCP 認證。 從今天開始&#xff0c;將英文題庫免費公布出來&#xff0c;并進行解析&#xff0c;幫助大家在一個月之內輕松通過OCP認證。 本期公布試題161~170 試題1…

leetcode_503 下一個更大元素

1. 題意 在一個循環數組中&#xff0c;找到下一個比它大的數。 2. 題解 也不知道怎么就單調棧了&#xff0c;可能是刷出來的吧。。。 還是來解釋一下吧&#xff01;&#xff01;&#xff01; 如果有新元素入棧 c c c&#xff0c; 那么在棧內的元素只要小于新元素的 s s s…

在postgresql中,group by時取第一個值

在postgresql中,group by時,uuid類型的字段可以用哪個聚集函數: SELECT create_user , (array_agg(myid))[1] AS first_uuid FROM "t_resource_data" GROUP BY create_user 人大金倉、PostgreSQL使用GROUP BY聚合后&#xff0c;取第一個值或最后一個值的辦_pgsql gro…

【FineDance】ModuleNotFoundError: No module named ‘pytorch3d‘

pytorch3d Traceback (most recent call last): File “/home/zhangbin/perfwork/01_ai/13_FineDance/data/code/pre_motion.py”, line 12, in from dataset.quaternion import ax_to_6v, ax_from_6v File “/home/zhangbin/perfwork/01_ai/13_FineDance/dataset/quaternion.…

MySQL 調優筆記

1.如何定位慢查詢? 定位慢查詢主要依靠 MySQL 的慢查詢日志配合工具如 pt-query-digest &#xff0c;mysqldumpslow 進行分析&#xff0c;或者通過 performance_schema 進行實時監控&#xff0c;進一步可以使用 EXPLAIN 分析執行計劃。 -> 開啟慢查詢日志 -- 查看慢查詢…

嵌入式 STM32 開發問題:燒錄 STM32CubeMX 創建的 Keil 程序沒有反應

燒錄 STM32CubeMX 創建的 Keil 程序沒有反應問題原因 大概率是因為沒有勾選 Reset and Run&#xff0c;程序成功燒錄到&#xff0c;但芯片不會自動復位并執行&#xff0c;而是保持停止狀態 處理策略 在 Keil 中勾選 Reset and Run 點擊 【Options for Target】 點擊 【Debu…

Flower框架中noise_multiplier與clipped_count_stddev的關系

noise_multiplier 與 clipped_count_stddev 的數學關系 在差分隱私聯邦學習中&#xff0c;noise_multiplier 和 clipped_count_stddev 是兩個核心參數&#xff0c;它們共同決定了隱私保護強度和模型精度的權衡。理解它們的關系需要從差分隱私的數學原理入手&#xff1a; 1. 高…

Laravel 從版本 5 到 12 每個版本都引入了一些新的特性、改進和棄用的功能

Laravel 從版本 5 到 12 經歷了多次更新,每個版本都引入了一些新的特性、改進和棄用的功能。下面是這些主要版本之間的關鍵區別: Laravel 5 Lumen: 引入了微框架 Lumen。Elixir: Elixir 是一個用于編譯和合并前端資源的工具,后來被 Laravel Mix 取代。Middleware Groups: 引…

Lambda 表達式的語法與使用:更簡潔、更靈活的函數式編程!

全文目錄&#xff1a; 開篇語Lambda 表達式的語法與使用&#xff1a;更簡潔、更靈活的函數式編程一、Lambda 表達式的語法1.1 Lambda 表達式的基本語法形式 二、Lambda 表達式的使用2.1 Lambda 表達式與匿名內部類的對比代碼示例&#xff1a;使用匿名內部類和 Lambda 表達式實現…

從0到1開發一個自己的工具 MCP 并發布到 test PyPi(Python個人版)

目錄 1. 我理解的 MCP2. 寫一個自己的MCP然后發布到 PyPi 上&#xff0c;包括加法工具和獲取當前 ip 工具2.1 先碎碎念一下 uv2.2 初始化項目&#xff08;全程在 cmd 下運行命令&#xff09;2.3 添加 mcp 依賴2.4 添加 server.py&#xff0c;先把加法功能添加上2.5 運行并測試加…

RabbitMQ緩存詳解:由來、發展、核心場景與實戰應用

一、RabbitMQ的由來與發展歷程 1.1 RabbitMQ的誕生背景 RabbitMQ誕生于金融行業的需求,最初由Rabbit Technologies Ltd開發,后被SpringSource收購,最終成為Pivotal的一部分。它的設計初衷是為了解決分布式系統中消息可靠傳輸的問題。在早期金融交易系統中,系統間的通信需…

機器學習與深度學習18-線性代數01

目錄 前文回顧1.特征向量和特征值2.矩陣與模型3.內積和外積4.向量的范數5.正交矩陣 前文回顧 上一篇文章地址&#xff1a;鏈接 1.特征向量和特征值 在機器學習中&#xff0c;特征向量和特征值是用于描述數據集中的特征或變量之間關系的重要概念。它們在降維技術&#xff08;…

如何讓 VS Code 僅通過滾輪放大字體,而不縮放整個界面?

在 VS Code 中&#xff0c;默認情況下使用 Ctrl滾輪&#xff08;Windows/Linux&#xff09;或 Cmd滾輪&#xff08;Mac&#xff09;會同時縮放整個界面&#xff08;包括 UI 元素和編輯器字體&#xff09;。如果你希望僅放大編輯器字體而不影響界面縮放&#xff0c;可以通過以下…

Vue3中v-bind指令用法詳解

在 Vue 3 中&#xff0c;v-bind 是一個核心指令&#xff0c;用于動態綁定 HTML 屬性或組件的 props 到 Vue 實例的數據。以下是詳細講解&#xff1a; 一、基礎用法 1. 綁定單個屬性 vue 復制 下載 <template><!-- 綁定 img 的 src 屬性 --><img v-bind:src…