函式物件及介面卡

2021-04-13 13:46:08 字數 1477 閱讀 4686

定義了呼叫操作符的類,其物件常稱作函式物件(function object),即它們的行為表現出類似於函式的行為。

函式物件通常用作泛型演算法的實參,如標準庫中大量泛型演算法有需要函式物件的版本。函式物件使用起來可以比函式靈活。標準庫在標頭檔案標頭檔案中定義了一組算術、關係與邏輯函式物件類,還定義了一組函式介面卡,使我們能夠特化或者擴充套件標準庫所定義的以及自定義的函式物件類。

算術函式物件型別

plus

+minus

-multiplies

*divides

/modulus

%negate

-關係函式物件型別

equal_to

==not_equal_to

!=greater

>

greater_equal

>=

less

<

less_equal

<=

邏輯函式物件型別

logical_and

&&logical_or

||logical_not!

每個標準庫函式物件類表示乙個操作符,即,每個類都定義了應用命名操作的呼叫操作符。上面只有兩個一元函式物件(unary function-object):negate和,其它都是二元函式物件(binary function-object)。

函式物件常用於覆蓋演算法中使用的預設操作符。在使用標準庫的函式物件時,需要生成該模板類的乙個例項物件,然後將生成的函式物件傳遞給演算法。例如,sort預設使用operator《按公升序對容器進行排序。為了按降序對容器進行排序,可以傳遞函式物件greater:

sort (svec.begin(), svec.end(), greater());

其中,greater()表示生成乙個比較元素型別為string類的greater函式物件。

標準庫提供了一組函式介面卡(function adapter),用於特化和擴充套件一元和二元函式物件。函式介面卡分為如下兩類:

1)繫結器(binder):它通過將乙個運算元繫結到給定值而將二元函式物件轉換為一元函式物件。

2)求反器(negator):它將謂詞函式物件的真值求反。

標準庫定義了兩個繫結器介面卡:bind1st和bind2nd。每個繫結器接受乙個函式物件和乙個值。bind1st將給定值繫結到二元函式物件的第乙個實參,bind2nd將給定值繫結到二元函式物件的第二個實參。例如,為了計算乙個容器中所有小於或等於10的元素的個數,可以這樣給count_if傳遞值:

count_if (vec.begin(), vec.end(), bind2nd(less_equal(), 10));

標準庫還定義了兩個求反器:not1和not2。not1將一元函式物件的真值求反,not2將二元函式物件的真值求反。例如:

count_if (vec.begin(), vec.end(), not1(bind2nd(less_equal(), 10)));

其效果是對不<=10的那些元素計數,即對》10的元素計數。

函式物件介面卡

include include include include include include include using namespace std 函式物件介面卡bind1st,bind2nd struct myprint public binary function binary functi...

介面卡模式(類介面卡 物件介面卡)

做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...

介面卡模式 預設介面卡,類介面卡,物件介面卡

模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...