<functional>
定義C++標準連結庫函式,以協助建構函式物件,也稱為函式物件及其系結器。 函式物件是定義 operator()
的類型物件。 函式物件可以是函式指標,不過該物件更常用來儲存可在函式呼叫期間存取的其他資訊。
需求
Header:<functional>
命名空間:std
備註
演算法需要兩種類型的函式物件: 一元 和 二進位。 一元函式物件需要一個引數,而二元函式物件需要兩個引數。 函式物件和函式指標都可當作述詞來傳遞給演算法,但函式物件還具有可調適性,因此能增加「C++ 標準程式庫」的範圍、彈性及效率。 例如,如果值需要在傳遞給演算法之前繫結至函式,則無法使用函式指標。 函式配接器會將函式指標轉換成可繫結至值的可調適性函式物件。 標頭 <功能> 也包含成員函式配接器,允許將成員函式呼叫為可調整函式物件。 如果函式具有指定其引數和傳回型別的巢狀類型宣告,則具有可調適性。 函式物件及其配接器可讓「C++ 標準程式庫」升級現有的應用程式,並協助將程式庫整合到 C++ 程式設計環境中。
函式物件在功能>中的<實作包括透明運算符函式,這些函式對像是標準函式物件的特製化,不採用任何範本參數,並執行函式自變數的完美轉送,並完美傳回結果。 當您叫用算術、比較、邏輯和位元運算子函子時,這些樣板特製化不會要求您指定引數類型。 您可以針對自己所擁有的類型或類型的異質組合,多載算術、比較、邏輯或位元運算子,然後使用透明運算子函子做為函式引數。 例如,如果您的 MyType 類型實作 operator<
,則您可以呼叫 sort(my_collection.begin(), my_collection.end(), less<>())
,而不是明確指定 sort(my_collection.begin(), my_collection.end(), less<MyType>())
類型。
C++11、C++14 和 C++17 中會新增下列功能:
「呼叫簽章」(Call Signature) 是傳回類型的名稱,後面會接著以括號括住、內含零個或多個引數類型的逗號分隔清單。
「可呼叫類型」(Callable Type) 是函式指標、成員函式指標、成員資料指標,或其物件緊接在函式呼叫運算子左側的類別類型。
「可呼叫物件」(Callable Object) 是屬於可呼叫類型的物件。
「呼叫包裝函式類型」(Call Wrapper Type) 是包含可呼叫物件並支援轉送至該物件之呼叫作業的類型。
「呼叫包裝函式」(Call Wrapper) 是屬於呼叫包裝函式類型的物件。
「目標物件」(Target Object) 是呼叫包裝函式物件所持有的可呼叫物件。
虛擬函式 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
。
如果呼叫包裝函式具有「弱式結果類型」(Weak Result Type),則其成員類型 result_type
的類型會根據包裝函式之目標物件的 T
類型,如下所示:
如果
T
是函式的指標,則result_type
與T
的傳回類型同義。如果
T
是成員函式的指標,則result_type
與T
的傳回類型同義。如果
T
是具有成員類型result_type
的類別類型,則result_type
與T::result_type
同義。否則沒有成員
result_type
。
每個呼叫包裝函式具有一個移動建構函式和一個複製建構函式。 「簡單呼叫包裝函式」(Simple Call Wrapper) 是具有指派運算子的呼叫包裝函式,其中它的複製建構函式、移動建構函式及指派運算子不會擲回例外狀況。 「轉送呼叫包裝函式」(Forwarding Call Wrapper) 是可藉由使用任意引數清單來呼叫的呼叫包裝函式,而且它可將引數當作參考傳遞給已包裝的可呼叫物件。 所有右值引數都會做為右值參考傳遞,而左值引數會做為左值參考傳遞。
成員
類別
名稱 | 描述 |
---|---|
bad_function_call | 描述所擲回之例外狀況的類別,這個例外狀況會指出對 function 物件上的 operator() 呼叫失敗,因為物件是空的。 |
binary_negate | 提供成員函式的類別範本,會否定指定二進位函式的傳回值。 (C++17年淘汰。 |
binder1st | 提供建構函式的類別範本,藉由將二進位函式的第一個自變數系結至指定的值,將二進位函式物件轉換成一元函式物件。 (C++11中已被取代,C++17中移除。 |
binder2nd | 提供建構函式的類別範本,藉由將二進位函式的第二個自變數系結至指定的值,將二元函式物件轉換成一元函式物件。 (C++11中已被取代,C++17中移除。 |
boyer_moore_horspool_searcher | |
boyer_moore_searcher | |
const_mem_fun_ref_t | 配接器類別,這個類別允許不接受引數的常數成員函式在使用參考引數初始化時,可當做一元函式物件來呼叫。 (C++11中已被取代,C++17中移除。 |
const_mem_fun_t | 配接器類別,這個類別允許不接受引數的常數成員函式在使用指標引數初始化時,可當做一元函式物件來呼叫。 (C++11中已被取代,C++17中移除。 |
const_mem_fun1_ref_t | 配接器類別,這個類別允許不接受單一引數的常數成員函式在使用參考引數初始化時,可當做二元函式物件來呼叫。 (C++11中已被取代,C++17中移除。 |
const_mem_fun1_t | 配接器類別,這個類別允許不接受單一引數的常數成員函式在使用指標引數初始化時,可當做二元函式物件來呼叫。 (C++11中已被取代,C++17中移除。 |
default_searcher | |
函數 | 包裝可呼叫物件的類別。 |
hash | 此類別可以計算值的雜湊碼。 |
is_bind_expression | 此類別測試呼叫 bind 時是否產生特定類型。 |
is_placeholder | 此類別測試特定類型是否為預留位置。 |
mem_fun_ref_t | 配接器類別,允許 non_const 使用參考自變數初始化時,不接受任何自變數作為一元函式對象的成員函式。(C++11中已被取代,C++17中移除。 |
mem_fun_t | 配接器類別,允許 non_const 使用指標自變數初始化時,不呼叫任何自變數做為一元函式對象的成員函式。(C++11中已被取代,C++17中移除。 |
mem_fun1_ref_t | 配接器類別,允許 non_const 使用參考自變數初始化時,接受單一自變數作為二進位函式對象的成員函式。(C++11中已被取代,C++17中移除。 |
mem_fun1_t | 配接器類別,允許 non_const 使用指標自變數初始化時,接受單一自變數作為二進位函式對象的成員函式。(C++11中已被取代,C++17中移除。 |
pointer_to_binary_function | 將二元函式指標轉換成可調適性二元函式。 (C++11中已被取代,C++17中移除。 |
pointer_to_unary_function | 將一元函式指標轉換成可調適性一元函式。 (C++11中已被取代,C++17中移除。 |
reference_wrapper | 包裝參考的類別。 |
unary_negate | 提供成員函式的類別範本,會否定指定一元函式的傳回值。 (C++17年淘汰。 |
函式
名稱 | 描述 |
---|---|
bind | 將引數繫結至可呼叫物件。 |
bind1st | 協助程式樣板函式,可建立配接器,透過將二元函式的第一個引數繫結至指定值,將二元函式物件轉換成一元函式物件。 (C++11中已被取代,C++17中移除。 |
bind2nd | 協助程式樣板函式,可建立配接器,透過將二元函式的第二個引數繫結至指定值,將二元函式物件轉換成一元函式物件。 (C++11中已被取代,C++17中移除。 |
bit_and | 傳回兩個參數的位 AND(二進位 operator& )。 |
bit_not | 傳回 參數的位補碼 (operator~ )。(新增C++14. |
bit_or | 傳回兩個參數的位 OR (operator| )。 |
bit_xor | 傳回兩個參數的位 XOR (operator^ ) 。 |
cref | 從引數建構常數reference_wrapper 。 |
調用 | |
mem_fn | 產生簡單呼叫包裝函式。 |
mem_fun | 協助程式樣板函式,可用來建構使用指標引數初始化時之成員函式的物件配接器。 (C++11中已被取代,C++17中移除。 |
mem_fun_ref | 協助程式樣板函式,可用來建構使用參考引數初始化時之成員函式的物件配接器。 |
not1 | 傳回一元述詞的補數。 (C++17年淘汰。 |
not2 | 傳回二元述詞的補數。 (C++17年淘汰。 |
not_fn | 傳回其函式對象結果的補碼。 (C++17年新增) |
ptr_fun | 協助程式樣板函式,可用來將一元和二元函式指標分別轉換成一元和二元可調適性函式。 (C++11中已被取代,C++17中移除。 |
ref | 從引數建構 reference_wrapper 。 |
swap | 交換兩個 function 物件。 |
結構
名稱 | 描述 |
---|---|
binary_function | 空的基底類別,定義可繼承衍生類別並提供二元函式物件的類型。 (C++11中已被取代,C++17中移除。 |
divides | 這個類別會提供預先定義的函式物件,該物件會在指定實值類型的項目上執行算術除法運算。 |
equal_to | 二元述詞,可測試指定類型的值是否等於該類型的另一個值。 |
greater | 二元述詞,可測試指定類型的值是否大於該類型的另一個值。 |
greater_equal | 二元述詞,可測試指定類型的值是否大於或等於該類型的另一個值。 |
less | 二元述詞,可測試指定類型的值是否小於該類型的另一個值。 |
less_equal | 二元述詞,可測試指定類型的值是否小於或等於該類型的另一個值。 |
logical_and | 這個類別會提供預先定義的函式物件,該物件會在指定實值類型的項目上執行邏輯結合運算,並測試結果為 True 或 False。 |
logical_not | 這個類別會提供預先定義的函式物件,該物件會在指定實值類型的項目上執行邏輯負運算,並測試結果為 True 或 False。 |
logical_or | 這個類別會提供預先定義的函式物件,該物件會在指定實值類型的項目上執行邏輯分離運算,並測試結果為 True 或 False。 |
minus | 這個類別會提供預先定義的函式物件,該物件會在指定實值類型的項目上執行算術減法運算。 |
modulus | 這個類別會提供預先定義的函式物件,該物件會在指定實值類型的項目上執行算術模數運算。 |
multiplies | 這個類別會提供預先定義的函式物件,該物件會在指定實值類型的項目上執行算術乘法運算。 |
negate | 這個類別會提供預先定義的函式物件,該物件會傳回項目值的負值。 |
not_equal_to | 二元述詞,可測試指定類型的值是否不等於該類型的另一個值。 |
plus | 這個類別會提供預先定義的函式物件,該物件會在指定實值類型的項目上執行算術加法運算。 |
unary_function | 空的基底類別,這個類別定義可能繼承自衍生類別並提供一元函式物件的類型。 (C++11中已被取代,C++17中移除。 |
物件
名稱 | 描述 |
---|---|
_1.._M | 可取代引數的預留位置。 |
操作員
名稱 | 描述 |
---|---|
operator== | 不允許可呼叫物件的等號比較。 |
operator!= | 不允許可呼叫物件的不等比較。 |