std function 學習筆記(2)

2021-10-04 23:41:26 字數 2355 閱讀 2486

隱約知道有個東西叫做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...