隱約知道有個東西叫做std::function,但一直用的習慣的是c 風格函式指標,那麼,什麼是 std::function呢?這個新東西的應用場景是什麼?和函式指標的區別是什麼?什麼時候該用函式指標,什麼時候該用std::function?它潛在的**的開銷是什麼?用函式指標初始化,std::function ,會如何呢?
現在我們來用std::function 重寫上面的函式:
// 儲存到 std::bind 呼叫的結果
std::functionf_display_31337 = std::bind(print_num, 31337);
f_display_31337();
// 儲存到成員函式的呼叫
std::functionf_add_display = &foo::print_add;
const foo foo(314159);
f_add_display(foo, 1);
f_add_display(314159, 1);
// 儲存到資料成員訪問器的呼叫
std::functionf_num = &foo::num_;
std::cout << "num_: " << f_num(foo) << '\n';
// 儲存到成員函式及物件的呼叫
using std::placeholders::_1;
std::functionf_add_display2 = std::bind( &foo::print_add, foo, _1 );
f_add_display2(2);
// 儲存到成員函式和物件指標的呼叫
std::functionf_add_display3 = std::bind( &foo::print_add, &foo, _1 );
f_add_display3(3);
// 儲存到函式物件的呼叫
std::functionf_display_obj = printnum();
f_display_obj(18);
}void enumfuncwithfunctional(const little_item* pdata, const uint32_t u32cnt, functionalcallback callback)
最後乙個函式 用的是值傳遞,為啥能改變外面的值呢????
睡了睡了
std function 的效能陷進
std function 的作用很強大,他讓vector等儲存不同型別函式的物件 function,functor,lambda 成為了可能。但他有乙個潛在的效能風險 在儲存lambda bind時,如果物件的大小 大於兩個指標的大小,他就需要分配動態空間。這是大部分人寫c 的人不期望看到的。先看f...
C 語法 std function 使用
這是c 11新新增的,標頭檔案 include 簡單而言就是乙個函式包裝器,乙個通用函式型別 用法 function裡面傳入的是返回值 和引數列表 將其當做std string std vector 這樣的型別就可以了。只不過其值為函式指標,但比函式指標更靈活。因為std function是一種模板...
std function的本質和使用特性
1.仿函式 又叫std function,是c 中的乙個模板類 2.c語言中的函式指標 int add int a,int b typedef int func int,int 給函式型別定義別名 func func1 func1 add 給函式指標初始化 或者int func1 int,int a...