void
func
(int a)
intmain
(int argc,
const
char
* ar**)
仿函式定義:行為類似於函式的東西,c++中通過在類中過載()運算子實現。又稱函式物件:能行駛函式功能的類。
class
test};
intmain
(int argc,
const
char
* ar**)
class
test
operatort(
)};int
main
(int argc,
const
char
* ar**)
class
test
void
func
(int a)
int m_a;};
intmain
(int argc,
const
char
* ar**)
如何能把各種不同的可呼叫物件的形式統一一下?,統一的目的是方便咱們呼叫
包含標頭檔案:
#include
c++11才有的,是個;類模板,用來裝各種可呼叫物件,不能裝類成員函式指標。
std::function類模板特點:就是能夠給它指定模板引數,它就能夠用統一的方式來處理函式。
void
func
(int a)
intmain
(int argc,
const
char
* ar**)
class
test};
intmain
(int argc,
const
char
* ar**)
class
test
int m_a =10;
};intmain
(int argc,
const
char
* ar**)
示例**1:
class
test
void
func()
private
: std::function<
void()
> callback;};
class
test2};
intmain
(int argc,
const
char
* ar**)
**示例2:
void
callback
(int i,
const std::function<
void
(int
)>
&f)void
func
(int i)
intmain
(int argc,
const
char
* ar**)
return0;
}
bind是乙個類模板,c++11才引入,能夠將物件以及相關引數繫結到一起,繫結完後可以直接呼叫,也可以用std::function進行儲存,在需要的時候呼叫。
格式:
std::
bind
(待繫結的物件/函式指標/成員函式指標, 引數繫結值1
, 引數繫結值2
, 引數繫結值3...
);
作用:
將可呼叫物件和引數繫結到一起,構成乙個仿函式 ,所以可以直接呼叫。
如果函式有多個引數,可以繫結一部分引數,其他引數在呼叫的時候指定。
void
func
(int a,
int b,
int c)
intmain
(int argc,
const
char
* ar**)
注意:1. bind對於預先繫結的函式引數是通過值傳遞的。
2. 對於不事先繫結的引數,通過std::placeholders傳遞的引數,是通過引用傳遞的。
void
func
(int
& a,
int& b)
intmain
(int argc,
const
char
* ar**)
class
test
private
:int m_a =0;
};intmain
(int argc,
const
char
* ar**)
std::function<
void
(int
,int
)> f1 =
bind
(&test::func,
&test, std::placeholders::_1, std::placeholders::_2)
;//上行第二個引數test前面如果加了&,就不會生成零時的test物件了,返回物件時test物件本身f1(
10,20)
;//test成員變數的值發生改變
參考部落格:c++ function類模板
C 可呼叫物件
可呼叫物件 使用呼叫運算子來呼叫乙個可呼叫物件。呼叫運算子 為一對括號 裡面放置實參列表 可能為空 即匿名函式,不命名的可呼叫物件。每個lambda有它唯一的 未命名的,可以用auto宣告型別 類型別。完整結構 capture list parameter list return type 其中 r...
c 可呼叫物件 解惑
如有錯誤,還望指正。在閱讀書籍或者論壇的時候常常會遇到可呼叫物件的概念,很多人都沒有深入的理解這個概念,甚至有人會覺得函式就是可呼叫物件就是 函式,其實是不對的,在這裡給大家做一下詳細的解釋。可呼叫物件是c 長久以來存在的乙個概念,大體可以分為4種,分別是 1.函式指標 2.仿函式 3.可以被隱式轉...
可呼叫物件
我們可以向演算法傳遞任何類別的可呼叫物件 函式,函式指標,過載了函式呼叫運算子的類,lambda 表示式,bind 函式。函式物件 1 如果類過載了函式呼叫運算子,則我們可以像使用函式一樣使用該類的物件。因為這樣的類同時也能儲存狀態,所以與普通函式相比他們更加靈活。例 struct absint i...