C 可呼叫物件 function bind

2021-10-14 12:21:14 字數 3185 閱讀 4657

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...