首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ TR1 function 與 bind:現代回調的基石

     編輯:C++ 入門

背景

C++11 前,回調常用函數指針 void(*)(int,int),無法綁定成員函數、攜帶狀態。TR1 引入 std::tr1::function 和 std::tr1::bind(源自 Boost),統一可調用對象封裝。

function

typedef std::tr1::function MsgEvent;
MsgEvent cb = some_function;        // 自由函數
cb = std::tr1::bind(&Class::method, &obj, _1, _2); // 綁定成員函數
cb("data", 100); // 統一調用

bind

bind(f, a1, a2, ...) 返回可調用對象,參數可為佔位符 _1, _2... 表示調用時傳入。支持:

  • 自由函數、靜態成員函數
  • 非靜態成員函數(需綁定 this 指針)
  • 函數對象、lambda

遷移到 C++11

C++11 將 TR1 納入標準:std::function, std::bind, std::placeholders::_1。用法相同,命名空間改為 std。

優勢

  • 類型擦除:統一存儲任意可調用對象。
  • 攜帶狀態:bind 綁定參數實現閉包效果。
  • 成員函數回調無需 static。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved