如果乙個物件可以使用呼叫運算子(())來呼叫乙個函式,()裡面可以放引數,這個物件就是可呼叫物件。不同型別的物件可能有相同的呼叫形式可呼叫物件也有型別,例如每個lambda都有他自己唯一(未命名的型別)
我們可以像演算法傳遞任何類別的可呼叫物件,可呼叫物件分為以下幾種:
1. 函式和函式指標
2. 過載了函式呼叫運算子的類
3. lambda表示式
4. bind的物件
5. 利用function生成
6. mem_fn生成
template
struct printarray};
void
test04()
;qsort
(ia,
sizeof
(ia)
/sizeof
(int),
sizeof
(int
), fun)
;for_each
(ia, ia +
sizeof
(ia)
/sizeof
(int
), printarray<
int>()
);}
函式指標的缺點:無法持有自己的狀態,也無法達到元件技術中心的可適配性(無法二次修飾,改變狀態)
class testa ;
~testa()
;int
operator()
(int a,
int b)
; private:};
void
test01()
stl演算法接收的仿函式的就是該方法。要成為可配接的仿函式還需要做更多的事情。這部分在仿函式到底是什麼一節中敘述
function<
bool
(const string &
)> fcn =
&string:
:empty;
vector<
int> vect =
;find_if
(vect.
begin()
, vect.
end(
), fcn)
;
function必須要提供成員的呼叫形式,可以使用mem_fn讓編譯器自動生成
vector<
int> vect =
;find_if
(vect.
begin()
, vect.
end(),
mem_fn
(&string:
:empty)
);
auto f =
find_if
(vec.
begin()
, vec.
end(),
bind
(&string:
:empty, _1)
);
C 可呼叫物件
可呼叫物件 使用呼叫運算子來呼叫乙個可呼叫物件。呼叫運算子 為一對括號 裡面放置實參列表 可能為空 即匿名函式,不命名的可呼叫物件。每個lambda有它唯一的 未命名的,可以用auto宣告型別 類型別。完整結構 capture list parameter list return type 其中 r...
c 可呼叫物件 解惑
如有錯誤,還望指正。在閱讀書籍或者論壇的時候常常會遇到可呼叫物件的概念,很多人都沒有深入的理解這個概念,甚至有人會覺得函式就是可呼叫物件就是 函式,其實是不對的,在這裡給大家做一下詳細的解釋。可呼叫物件是c 長久以來存在的乙個概念,大體可以分為4種,分別是 1.函式指標 2.仿函式 3.可以被隱式轉...
C 可呼叫物件 function bind
void func int a intmain int argc,const char ar 仿函式定義 行為類似於函式的東西,c 中通過在類中過載 運算子實現。又稱函式物件 能行駛函式功能的類。class test intmain int argc,const char ar class test...