C++11 前,回調常用函數指針 void(*)(int,int),無法綁定成員函數、攜帶狀態。TR1 引入 std::tr1::function 和 std::tr1::bind(源自 Boost),統一可調用對象封裝。
typedef std::tr1::function MsgEvent;
MsgEvent cb = some_function; // 自由函數
cb = std::tr1::bind(&Class::method, &obj, _1, _2); // 綁定成員函數
cb("data", 100); // 統一調用
bind(f, a1, a2, ...) 返回可調用對象,參數可為佔位符 _1, _2... 表示調用時傳入。支持:
C++11 將 TR1 納入標準:std::function, std::bind, std::placeholders::_1。用法相同,命名空間改為 std。