共用方式為


<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):當 fT 類別的成員函式指標,而且 t1T 類型的物件、T 類型的物件參考或衍生自 T 之類型的物件參考時。

  • ((*t1).*f)(t2, ..., tN):當 fT 類別的成員函式指標,而且 t1 不是上一個項目所描述的任何一個類型時。

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

  • (*t1).*f:當 N == 1,fT 類別的成員資料指標,而且 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_typeT 的傳回類型同義。

  • 如果 T 是成員函式的指標,則 result_typeT 的傳回類型同義。

  • 如果 T 是具有成員類型 result_type 的類別類型,則 result_typeT::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!= 不允許可呼叫物件的不等比較。

另請參閱

標頭檔參考
C++ 標準程式庫中的執行緒安全
C++ 標準程式庫參考