針對函式物件的多型包裝器(又稱多態函式物件包裝器)在語義和語法上和函式指標相似,但不像函式指標那麼狹隘。只要能被呼叫,且其引數能與包裝器相容的都能以多態函式物件包裝器稱之(函式指標,成員函式指標或仿函式)。
通過以下例子,我們可以了解多態函式物件包裝器的特性:
std::function
<
int(
int, int
)> func;
// 利用樣板類 'function'
// 建立包裝器
std::
plus
<
int> add;
// 'plus' 被宣告為 'templatet plus( t, t ) ;'
// 因此 'add' 的型別是 'int add( int x, int y )'
func =
&add;
// 可行。'add' 的型參和回返值型別與 'func' 相符
int a = func (
1, 2);
// 注意: 若包裝器 'func' 沒有參考到任何函式
// 會丟出 'std::bad_function_call' 例外
std::
function
<
bool
(short, short
)> func2 ;if(
!func2)
; test car;
func = std::
ref(car)
;// 樣板類 'std::ref' 回傳乙個 struct 'car'
// 其成員函式 'operator()' 的包裝
}func = func2;
// 可行。'func2' 的型參和回返值型別可透過型別轉換進而與 'func' 相符
模板類function
將定義在標頭檔案,而不須更動到語言本身。
C 下篇 多型(函式過載 虛函式)(11)
函式過載 包括運算子過載 名同而引數和型別不同,函式體也可不同,但為了多型的含義,盡量函式體不同點少點 運算子過載 觸發點 當遇到運算子前後不是普通資料時,就自動呼叫重寫的運算子,兩個引數運算叫作二元運算子,乙個引數參與運算叫作一元運算子 多型 不同物件把實際引數傳送給不同的函式,但是函式有個特點 ...
C 11 理解 二十 之 多元組類別
多元組是乙個內由數個異質物件以特定順序排列而成的資料結構。多元組可被視為是struct其資料成員的一般化。由 tr1 演進而來的 c 11 多元組類別將受益於 c 11 某些特色像是變長引數模板。tr1 版本的多元組類別對所能容納的物件個數會因實現而有所限制,且實現上需要用到大量的巨集技巧。相反的,...
C 11的function函式物件
c 中的函式種類很多 但這些函式可能共享一種呼叫方式。呼叫形式指明了呼叫返回的型別以及傳遞給呼叫的實參型別。比如 int int,int std function是乙個通用的多態函式包裝器,可以呼叫普通函式 lambda函式 仿函式 bind物件 類的成員函式和指向資料成員的指標,function定...