c++ 和c回調混合的一種實現

代碼

#include <iostream>
#include <list>using namespace std;
struct CallbackBase { virtual void operator()(const char* msg,int len) = 0; };void messagesCB(const char* msg,int len)
{std::cout<<msg<<" "<<len<<std::endl;
}struct MessagesWatcher
{void update(const char* msg,int len){for(auto& cb:m_lst){(*cb)(msg,len);}}void add(CallbackBase* cb){m_lst.push_back(cb);}
public:std::list<CallbackBase*> m_lst;
};MessagesWatcher watcher;template<class Callable>
void dispatch(Callable callable)
{struct _Callback : public CallbackBase {Callable callable;_Callback(Callable& cb) : callable(cb) { }void operator()(const char* msg,int len) { callable(msg,len); }};_Callback* callback = new _Callback(callable);watcher.add(callback);
}int main()
{dispatch(messagesCB);std::string lambdas{"lambdas"};dispatch([lambdas](const char* msg,int len){std::cout<<lambdas<<" "<<msg<<" "<<len<<std::endl;});watcher.update("hello",5);return 0;
}

說明

支持lambda

std::string lambda{"lambda"};dispatch([lambdas](const char* msg,int len){std::cout<<lambdas<<" "<<msg<<" "<<len<<std::endl;});

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

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

相關文章

中國土壤類型空間分布數據

中國土壤類型空間分布數據根據全國土壤普查辦公室1995年編制并出版的《1&#xff1a;100萬中華人民共和國土壤圖》數字化生成&#xff0c; 采用了傳統的“土壤發生分類”系統&#xff0c;基本制圖單元為亞類&#xff0c;共分出12土綱&#xff0c;61個土類&#xff0c;227個亞類…

JavaScript原理篇——Promise原理及筆試題實戰演練

Promise 是 JavaScript 中用于處理異步操作的對象&#xff0c;它代表了一個可能還沒有完成的操作的最終完成或失敗&#xff0c;以及其結果值。Promise 對象有三種狀態&#xff1a; Pending&#xff08;進行中&#xff09;&#xff1a;初始狀態&#xff0c;既不是成功&#xff0…

JavaScript BOM - 瀏覽器對象模型

BOM&#xff08;瀏覽器對象模型&#xff09;是JavaScript中與瀏覽器交互的一組API&#xff0c;它提供了一種方法來操作瀏覽器窗口和文檔。BOM由一組對象組成&#xff0c;這些對象允許您訪問瀏覽器本身的功能&#xff0c;而不僅僅是網頁內容。 BOM對象包括&#xff1a; window對…

融知財經:期貨和現貨的區別是什么?哪個風險大?

期貨和現貨在交易對象等方面存在明顯的區別。期貨交易是一種衍生金融工具&#xff0c;主要用于價格發現、風險管理和投機&#xff0c;而現貨交易則是商品和服務的實際買賣。在選擇進行期貨交易還是現貨交易時&#xff0c;投資者需要根據自己的需求和市場情況來決定。 期貨和現貨…

二叉搜索樹 題解 二叉搜索樹的構建 DFS

二叉搜索樹 題目描述 判斷兩序列是否為同一個二叉搜索樹序列。 輸入描述 第一行是一個數 n ( 1 < n < 20 )&#xff0c;表示有 n 個二叉搜索樹序列需要判斷。 接下去一行是一個序列&#xff0c;序列長度小于 10 &#xff0c;包含 0 ~ 9 的數字&#xff0c;沒有重復數…

【Android】Kotlin學習之Lambda表達式

java和kotlin對比 Lambda語法 Lambda隱形參數 it 也可以不使用指定的名稱it, 可以 自定義 Lambda 使用下劃線

原來Python處理word這么簡單:關于python操作文檔的問題

關于python操作文檔的問題 文檔類型&#xff1a;docx 語言&#xff1a;python 我想在文檔中姓名后面的下劃線之上插入一個姓名&#xff0c;并保存為新的文檔&#xff0c; 用python應該怎么實現呢 文檔見下圖 一般情況下&#xff0c;我們在看到題目的時候&#xff0c;應該先審題…

PHP+B/S架構 不良事件管理系統源碼 醫院不良事件報告系統源碼,開發技術vue2+element+laravel8

PHPB/S架構 不良事件管理系統源碼 醫院不良事件報告系統源碼&#xff0c;開發技術vue2elementlaravel8 技術架構&#xff1a;前后端分離&#xff0c;倉儲模式&#xff0c;BS架構&#xff0c; 開發技術&#xff1a;PHPvscodevue2elementlaravel8mysql5.7&#xff0c;專業團隊研…

[AutoSar]lauterbach_001_ORTI_CPUload_Trace

目錄 關鍵詞平臺說明一、ORTI概述二、ORTI文件的生成三、ORTI文件的導入四、Trace 功能4.1 Trace 功能菜單介紹4.2 Trace功能的配置4.3 Trace MCDS 設置4.4 Task Switches斷點的設置4.5 Trace 數據的錄取4.6 CPU 負載和Task調度的查看 關鍵詞 嵌入式、C語言、autosar、OS、BSW…

【高階數據結構】圖--最短路徑問題

圖--最短路徑問題 一、單源最短路徑--Dijkstra算法1、簡介2、解析3、代碼4、測試用例5、打印最小路徑代碼和測試6、缺陷&#xff1a;不能使用負路徑 二、單源最短路徑--Bellman-Ford算法1、簡介2、解析&#xff08;1&#xff09;詳情i、負權問題&#xff1a;一個點只跑一趟找最…

A股行情訂閱工具,支持股票/可轉債level2/level2數據

簡單使用 ./hqCenter -h-initCodesFile string啟動即訂閱的code (default "./data/initCodes.json")-listen stringhttp監聽地址 (default ":31800")-saveHqFile string行情寫入文件,自動加日期后綴。為空則不寫入文件。 (default "./data/hq")-…

PostGIS之pointcloud

瀚高數據庫 目錄 環境 文檔用途 詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;14 文檔用途 本文詳細介紹pointcloud&#xff0c;包括&#xff1a;安裝配置、兩個核心數據類型、功能函數、使用PDAL讀寫pgpoingcloud數據等。 詳…

學習前端第三十四天(call,apply,函數綁定;箭頭函數;對象屬性配置)

一、call、apply function fn(x, y) { console.log("hello", x, y, this) }; 1.call方法 作用&#xff1a;調用后執行函數&#xff0c;可以給“this”傳參數 fn.call({ a: 1 }, 1, 2,); 2.apply方法 第一個給“this”傳參數&#xff0c;第二個參數需要是數組形式…

ElementUi中el-table組件使用row-class-name修改指定行顏色

可以通過指定 Table 組件的 row-class-name 屬性來為 Table 中的某一行添加 class&#xff0c;表明該行處于某種狀態。 注意&#xff1a;如果在el-table中使用了stripe這個屬性&#xff0c;這個屬性是帶斑馬紋的表格樣式&#xff0c;它和row-class-name共存時是沒有效果。 注…

【微信開發】微信支付前期準備工作(申請及配置)

1、申請并配置公眾號或微信小程序 1.1 賬戶申請 通過微信公眾平臺&#xff0c;根據指引申請微信小程序或公眾號&#xff0c;申請時需要微信認證&#xff0c;申請流程不在贅述 1.2 信息配置 申請通過后&#xff0c;需進入小程序和公眾號內進行信息配置 1.2.1 小程序信息配置…

Mac YOLO V9推理測試(基于ultralytics)

環境&#xff1a; Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、準備工作 使用YOLO一般都會接觸ultralytics這個框架&#xff0c;今天來試試用該框架進行YOLO V9模型的推理。 YOLOv9目前提供了四種模型下載&#xff1a;yolov9-c.pt、yolov9-e.pt、gelan-c.p…

lint 代碼規范,手動修復,以及vscode的第三方插件eslint自動修復

ESlint代碼規范 不是語法規范&#xff0c;是一種書寫風格&#xff0c;加多少空格&#xff0c;縮進多少&#xff0c;加不加分號&#xff0c;類似于書信的寫作格式 ESLint:是一個代碼檢查工具&#xff0c;用來檢查你的代碼是否符合指定的規則(你和你的團隊可以自行約定一套規則)…

【管理篇】如何橫向溝通?

目錄標題 什么是橫向溝通&#xff1f;常見溝通問題 如何處理橫向溝通中的問題&#xff1f; 什么是橫向溝通&#xff1f; 所謂橫向溝通&#xff0c;就是和沒有直接匯報關系的合作方之間的溝通&#xff0c;指的是與平級間進行的與完成工作有關的交流&#xff1b;橫向溝通核心的挑…

mqtt定時腳本

需求描述 給mqtt的topic發送信息 對應的topic接收請求后&#xff0c;執行發送短信指令 信息內容 SMS,10086,102 lua的mqtt里面&#xff0c;截取判斷即可 –>可以實現 定時任務&#xff0c; 每月開機一次 發短信&#xff1f; 或者使用開機通知&#xff1f; 定時消費…