最終更新日時:
が更新

履歴 編集

<functional>

functional

<functional>ヘッダは、関数オブジェクトに関する機能を提供する。

関数オブジェクトとは、通常の関数と同じシンタックスで扱えるクラスである。
単純な関数オブジェクトの構造は次のとおりである:

struct doubler {
  int operator ()(int x) const { return x * 2; }
};

関数オブジェクトは、関数・関数へのポインタに対して、以下のような利点がある:

  • 状態を保持できる
  • (特にアルゴリズムにファンクタとして渡した場合)インライン展開が容易である
  • 多相(オーバーロードやテンプレート)にしても関数へのポインタのように曖昧にならない

多相的な関数オブジェクト

名前 説明 対応バージョン
function 関数・関数オブジェクトの多相的なラッパー(class template) C++11
bad_function_call 不正な関数呼び出しに関する例外(class) C++11

引数の束縛

名前 説明 対応バージョン
bind 関数の引数を部分適用する(function template) C++11
is_bind_expression 型をbindの式と見なすか判定する(class template) C++11
is_placeholder 型がプレースホルダーかどうかを判定する(class template) C++11
placeholders 部分適用のためのプレースホルダー(namespace) C++11
mem_fn メンバ関数アダプタ(function template) C++11

参照ラッパー

名前 説明 対応バージョン
reference_wrapper テンプレートで参照を渡すためのラッパー(class template) C++11
ref オブジェクトへの参照を構築する(function template) C++11
cref オブジェクトへのconst左辺値参照を構築する(function template) C++11

ハッシュ関数

名前 説明 対応バージョン
hash オブジェクトを示すハッシュを計算する(class template) C++11

算術演算関数オブジェクト

名前 説明 対応バージョン
plus 加算(class template)
minus 減算(class template)
multiplies 乗算(class template)
divides 除算(class template)
modulus 剰余算(class template)
negate 符号反転(class template)

比較演算関数オブジェクト

名前 説明 対応バージョン
equal_to 等値比較(class template)
not_equal_to 非等値比較(class template)
less 左辺が右辺より小さいかの比較(class template)
less_equal 左辺が右辺以下かの比較(class template)
greater 左辺が右辺より大きいかの比較(class template)
greater_equal 左辺が右辺以上かの比較(class template)

論理演算関数オブジェクト

名前 説明 対応バージョン
logical_and 論理積(AND) (class template)
logical_or 論理和(OR) (class template)
logical_not 論理否定 (class template)

ビット演算関数オブジェクト

名前 説明 対応バージョン
bit_and ビットごとの論理積(AND) (class template) C++11
bit_or ビットごとの論理和(OR) (class template) C++11
bit_xor ビットごとの排他的論理和(XOR) (class template) C++11
bit_not ビットごとの論理否定(NOT) (class template) C++14

論理反転関数オブジェクト

名前 説明 対応バージョン
unary_negate 単項の論理反転 (class template)
not1 単項の述語を論理反転する (function template)
binary_negate 二項の論理反転 (class template)
not2 二項の述語を論理反転する (function template)

古い関数オブジェクトアダプタ(C++11から非推奨)

名前 説明 対応バージョン
unary_function 単項関数オブジェクト(class template)
binary_function 二項関数オブジェクト(class template)
pointer_to_unary_function 単項関数ポインタを関数オブジェクトに変換するアダプタ(class template)
pointer_to_binary_function 二項関数ポインタを関数オブジェクトに変換するアダプタ(class template)
ptr_fun 関数ポインタを関数オブジェクトに変換する(function template)
mem_fun_t メンバ関数ポインタを関数オブジェクトに変換するアダプタ。 オブジェクトへのポインタに対してメンバ関数を呼び出す。(class template)
mem_fun1_t 単項メンバ関数ポインタを関数オブジェクトに変換するアダプタ。 オブジェクトへのポインタに対してメンバ関数を呼び出す。(class template)
mem_fun_ref_t メンバ関数ポインタを関数オブジェクトに変換するアダプタ。 オブジェクトへの参照に対してメンバ関数を呼び出す。(class template)
mem_fun1_ref_t 単項メンバ関数ポインタを関数オブジェクトに変換するアダプタ。 オブジェクトへの参照に対してメンバ関数を呼び出す。(class template)
const_mem_fun_t メンバ関数ポインタを関数オブジェクトに変換するアダプタ。 オブジェクトへのconstポインタに対してメンバ関数を呼び出す。(class template)
const_mem_fun1_t 単項メンバ関数ポインタを関数オブジェクトに変換するアダプタ。 オブジェクトへのconstポインタに対してメンバ関数を呼び出す。(class template)
mem_fun メンバ関数ポインタを関数オブジェクトに変換する。 返される関数オブジェクトは、オブジェクトへのポインタを引数にとる。(function template)
mem_fun_ref メンバ関数ポインタを関数オブジェクトに変換する。 返される関数オブジェクトは、オブジェクトへの参照を引数にとる。(function template)

古い関数バインダ(C++11から非推奨)

名前 説明 対応バージョン
binder1st 第1引数を部分適用する関数オブジェクト(class template)
bind1st 第1引数を部分適用する(function template)
binder2nd 第2引数を部分適用する関数オブジェクト(class template)
bind2nd 第2引数を部分適用する関数オブジェクト(function template)

コンセプト

名前 説明 対応バージョン
Callable 関数呼び出し可能な型 C++11
INVOKE 関数呼び出しの式 C++11