C 11 理解 之 多態函式物件包裝器

2021-06-21 13:43:53 字數 991 閱讀 1581

針對函式物件的多型包裝器(又稱多態函式物件包裝器)在語義和語法上和函式指標相似,但不像函式指標那麼狹隘。只要能被呼叫,且其引數能與包裝器相容的都能以多態函式物件包裝器稱之(函式指標,成員函式指標或仿函式)。

通過以下例子,我們可以了解多態函式物件包裝器的特性:

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