共用方式為


<functional>

定義標準程式庫函式說明建構 函式物件(也稱為功能工具)及其繫結器。 函式物件是一種定義 operator() 的型別之物件。 函式物件可以是函式指標,不過這個物件更常用來儲存在函式呼叫期間,可以存取的其他資訊。

#include <functional>

備註

演算法需要函式物件的兩種型別:一元和二元。 一元函式物件必須有一個引數,而二元函式物件需要兩個引數。 函式物件和函式指標可做為演算法的述詞,不過函式物件也適用於 STL,並可以增加 STL 的範圍、彈性和效率。 例如,如果值需要在傳遞給演算法之前繫結至函式,則無法使用函式指標。 函式配接器將函式指標轉換成可以繫結至值的適應性函式物件。 <functional> 的標頭也包含成員函式配接器,其允許成員函式被呼叫做為適應性函式物件。 如果函式有巢狀型別宣告指定其引數和傳回型別,這些函式是可以調整的。 C++ 標準需要將所有標準物件類別繼承自 unary_function 或 binary_function 基底的類別,以實作適應性。 函式物件和其配接器允許 STL 升級現有的應用程式和協助整合 STL 至 C++ 程式設計環境。

<functional> 中函式物件的 Visual C++ 實作包含 透明運算子功能器(transparent operator functors),為標準函式物件的特製化,不接受樣板參數,且執行函式引數的完美轉送(forwarding)並傳回完善的結果。 這個功能是 C++14 英文標準規格的一部分。 當您叫用算術、比較、邏輯和位元運算子功能工具時,這些樣板特製化不會要求您指定引數型別。 您可以為您的型別多載算術、比較、邏輯、位元運算子,或型別的異質組合,然後使用透明運算子功能器做為函式引數。 例如,如果您的型別 MyType 實作 operator<,您可以呼叫 sort(my_collection.begin(), my_collection.end(), less<>()) 而不是明確指定型別 sort(my_collection.begin(), my_collection.end(), less<MyType>())。

C++11/C++14 實作。

C++11/C++14 的 Visual C++ 實作已加入下列功能:

  • 呼叫簽章 是一個傳回型別的名稱,其為零或多個引數型別的清單,清單括入一個括號內並以逗號分隔。

  • 可呼叫型別 是指向函式的指標、指向成員函式的指標、指向成員資料的指標或一個類別型別,其物件可以在函式呼叫運算子左邊立即出現。

  • 可呼叫物件 是一個可呼叫型別的物件。

  • 呼叫包裝函式型別 是保留可呼叫物件的型別,並支援轉送至該物件的呼叫作業。

  • 呼叫包裝函式 是呼叫包裝函式型別的物件。

  • 目標物件 是呼叫包裝函式物件持有的可呼叫物件。

假設函式 INVOKE(f, t1, t2, ..., tN) 可能代表以下其中之一的意義:

  • (t1.*f)(t2, ..., tN):當 f 是指向類別 T 的成員函式,並且 t1 是型別 T 的物件或指向型別 T 物件的參考或衍生自 T的型別之物件的參考。

  • ((*t1).*f)(t2, ..., tN):當 f 是指向類別 T 的成員函式的指標,且 t1 不是先前項目所描述的其中一個型別。

  • t1.*f:當 N == 1 且 f 是指向類別 T 的成員資料的指標,並且 t1 是型別 T 的物件或指向型別 T 物件的參考或衍生自 T的型別之物件的參考。

  • (*t1).*f:當 N == 1 且 f 是指向類別 T 的成員資料的指標,並且 t1 不是先前項目所描述的其中一個型別。

  • f(t1, t2, ..., tN):在其他所有情況下。

假設函式 INVOKE(f, t1, t2, ..., tN, R) 表示 INVOKE(f, t1, t2, ..., tN) 隱含地轉換成 R。

如果呼叫包裝函式具有 弱式結果型別,它的成員型別 result_type 的型別是以包裝函式的目標物件的型別 T 為基礎,如下所示:

  • 如果 T 是函式的指標, result_type 是 T的傳回型別的同義字。

  • 如果 T 是成員函式的指標, result_type 是 T的傳回型別的同義字。

  • 如果 T 是有一個成員型別 result_type的類別型別,則 result_type 為 T::result_type的同義字。

  • 否則,沒有成員 result_type。

每個呼叫包裝函式有一個移動建構函式和一個複製建構函式。 簡單呼叫包裝函式 是具有指派運算子的呼叫包裝函式,其複製建構函式、移動建構函式和指派運算子不會擲回例外狀況。 轉接呼叫包裝函式 是可以使用選擇性引數清單呼叫,並提供引數給包裝的可呼叫物件當做參考的包裝函式。 所有右值引數會作為右值參考,而左值引數做為左值參考。

類別

bad_function_call

表示因為物件是空的,因此擲回的例外狀況(在 function 物件上呼叫 operator())失敗的類別。

binary_negate

提供一個成員函式的樣板類別,此成員函式否定指定的二元函式之傳回值。

binder1st

提供一個建構函式的樣板類別,此建構函式透過繫結二元函式第一個引數為指定值,將二元函式物件轉換為一元函式物件。

binder2nd

提供一個建構函式的樣板類別,此建構函式透過繫結二元函式第二個引數為指定值,將二元函式物件轉換為一元函式物件。

const_mem_fun_ref_t

為一配接器類別,此類別允許常數成員函式在使用參考引數初始化時,不接受引數即被呼叫為一元函式物件。

const_mem_fun_t

為一配接器類別,此類別允許常數成員函式在使用指標引數初始化時,不接受引數即被呼叫為一元函式物件。

const_mem_fun1_ref_t

為一配接器類別,此類別允許常數成員函式在使用參考引數初始化時,接受單一引數並被呼叫為二元函式物件。

const_mem_fun1_t

為一配接器類別,此類別允許常數成員函式在使用指標引數初始化時,接受單一引數並被呼叫為二元函式物件。

function

封裝可呼叫物件的類別。

hash

計算值的雜湊程式碼的類別。

is_bind_expression

測試呼叫 bind 時是否產生一個特定型別。

is_placeholder

測試特定型別是否是預留位置的類別。

mem_fun_ref_t

為一配接器類別,此類別允許 non_const 成員函式在使用參考引數初始化時,不接受引數即被呼叫為一元函式物件。

mem_fun_t

為一配接器類別,此類別允許 non_const 成員函式在使用指標引數初始化時,不接受引數即被呼叫為一元函式物件。

mem_fun1_ref_t

為一配接器類別,此類別允許 non_const 成員函式在使用參考引數初始化時,接受單一引數並被呼叫為二元函式物件。

mem_fun1_t

為一配接器類別,此類別允許 non_const 成員函式在使用指標引數初始化時,接受單一引數並被呼叫為二元函式物件。

pointer_to_binary_function

將二元函式指標轉換成適應性二元函式。

pointer_to_unary_function

將一元函式指標轉換成適應性一元函式。

reference_wrapper

封裝參考的類別。

result_of

保留包裝的可呼叫物件之傳回型別的結構。

unary_negate

提供一個成員函式的樣板類別,此成員函式否定指定的一元函式之傳回值。

函式

bind

將引數繫結至可呼叫物件。

bind1st

為一 helper 樣板函式,此函式建立一個配接器,透過繫結二元函式第一個引數為指定值將二元函式物件轉換成一元函式物件。

bind2nd

為一 helper 樣板函式,此函式建立一個配接器,透過繫結二元函式第二個引數為指定值將二元函式物件轉換成一元函式物件。

bit_and

傳回這兩個參數的位元邏輯 AND (二元運算子&) 結果。

bit_not

傳回參數的位元邏輯補數 (operator~) 結果。

bit_or

傳回這兩個參數的位元邏輯 OR (二元運算子 |) 結果。

bit_xor

傳回這兩個參數的位元邏輯 XOR (二元運算子 ^) 結果。

cref

從引數建立常數 reference_wrapper 。

mem_fn

產生一個簡單呼叫包裝函式。

mem_fun

當使用指標引數初始化時,helper 樣板函式用來為成員函式建構函式物件配接器。

mem_fun_ref

當使用參考引數初始化時,helper 樣板函式用來為成員函式建構函式物件配接器。

not1

傳回一元述詞的補充。

not2

傳回二元述詞的補充。

ptr_fun

為一 helper 樣板函式,用來將一元和二元函式指標分別轉換成一元和二元適應性函式。

ref

從引數建立 reference_wrapper 。

交換

交換兩個 function 物件。

Structs

binary_function

為一空的基底類別,其定義可能會由衍生類別(此類別提供二元函式物件)繼承的型別。

divides

此類別提供預先定義的函式物件,其會在指定值型別的項目執行除法的算術運算。

equal_to

為一二進位述詞,測試指定型別的值是否與該型別的另一個值相等。

greater

為一二進位述詞,測試指定型別的值是否大於該型別的另一個值。

greater_equal

為一二進位述詞,測試指定型別的值是否大於或等於該型別的另一個值。

less

為一二進位述詞,測試指定型別的值是否小於該型別的另一個值。

less_equal

為一二進位述詞,測試指定型別的值是否小於或等於該型別的另一個值。

logical_and

此類別提供預先定義的函式物件,其會在指定值型別的項目執行 conjunction 的邏輯運算並驗證結果為真或假。

logical_not

此類別提供預先定義的函式物件,其會在指定值型別的項目執行 negation 的邏輯運算並驗證結果為真或假。

logical_or

此類別提供預先定義的函式物件,其會在指定值型別的項目執行 disjunction 的邏輯運算並驗證結果為真或假。

minus

此類別提供預先定義的函式物件,其會在指定值型別的項目執行減法的算術運算。

modulus

此類別提供預先定義的函式物件,其會在指定值型別的項目執行模數的算術運算。

multiplies

此類別提供預先定義的函式物件,其會在指定值型別的項目執行乘法的算術運算。

negate

此類別提供預先定義的函式物件,其回傳一個項目值的負值。

not_equal_to

為一二進位述詞,測試指定型別的值是否與該型別的另一個值不相等。

plus

此類別提供預先定義的函式物件,其會在指定值型別的項目執行加法的算術運算。

unary_function

為一空的基底類別,其定義可能會由衍生類別(此類別提供一元函式物件)繼承的型別。

物件

_1.._M

可取代引數的預留位置。

運算子

operator==

禁止可呼叫物件的相等比較。

operator!=

禁止可呼叫物件的不相等比較。

請參閱

參考

C++ 標準程式庫中的執行緒安全

標準樣板程式庫

其他資源

<functional> 成員

C++ 標準程式庫標頭檔