<functional>

関数オブジェクト (ファンクターとも呼ばれます) とそれらのバインダーの作成に役立つ C++ 標準ライブラリ関数を定義します。 関数オブジェクトは、operator() を定義するオブジェクトの種類です。 関数オブジェクトは関数ポインターとしても使用できますが、一般的に、関数オブジェクトは、関数呼び出しの実行中にアクセスできる追加情報を格納するために使用されます。

必要条件

ヘッダー:<functional>

名前空間: std

解説

アルゴリズムでは、単項と二項という 2 種類の関数オブジェクトが使用されます。 単項関数オブジェクトは 1 つの引数を必要とし、二項関数オブジェクトは 2 つの引数を必要とします。 関数オブジェクトと関数ポインターは述語としてアルゴリズムに渡すことができますが、関数オブジェクトは適応性があり、C++ 標準ライブラリのスコープ、柔軟性、効率が向上します。 たとえば、値をアルゴリズムに渡す前に、その値を関数にバインドする必要がある場合は、関数ポインターを使用できないことがあります。 関数アダプターを利用すると、関数ポインターが、値にバインドできる適応性のある関数オブジェクトに変換されます。 ヘッダー <functional> には、メンバー関数を適応性のある関数オブジェクトとして呼び出すことができるメンバー関数アダプターも含まれます。 関数が引数と戻り値の型を指定する入れ子になった型宣言を持っている場合、それらの関数は適応性があります。 関数オブジェクトとそのアダプターを使用すると、C++ 標準ライブラリで既存のアプリケーションをアップグレードでき、ライブラリと C++ プログラミング環境との統合に役立てることができます。

関数>型の関数オブジェクトの実装には、標準関数オブジェクト<の特殊化であり、テンプレート パラメーターを受け取っていない透過的な演算子ファンクタが含まれ、関数引数の完全な転送と結果の完全な戻り値が実行されます。 これらのテンプレートの特殊化では、算術演算子のファンクター、比較演算子のファンクター、論理演算子のファンクター、ビットごとの演算子のファンクターを呼び出すときに、引数の型を指定する必要はありません。 ユーザー独自の型または異なる種類の型の組み合わせに対して算術演算子、比較演算子、論理演算子、ビットごとの演算子をオーバーロードしてから、透過的な演算子のファンクターを関数の引数として使用できます。 たとえば、ユーザー独自の型 MyTypeoperator< を実装する場合、型 sort(my_collection.begin(), my_collection.end(), less<MyType>()) を明示的に指定する代わりに、sort(my_collection.begin(), my_collection.end(), less<>()) を呼び出すことができます。

C++ 11、C++ 14、C++ 17 では、次の機能が追加されています。

  • 呼び出しシグネチャは、戻り値の型の名前の後に、かっこで囲まれたコンマ区切りのリスト (0 個以上の引数の型が含まれます) が続きます。

  • 呼び出し可能型 は、関数へのポインター、メンバー関数へのポインター、メンバー データへのポインター、関数呼び出し演算子のすぐ左にオブジェクトを示すことができるクラス型のいずれかになります。

  • 呼び出し可能オブジェクトは、呼び出し可能型のオブジェクトです。

  • 呼び出しラッパーの型は、呼び出し可能オブジェクトを保持する型であり、オブジェクトに転送される呼び出し操作をサポートします。

  • 呼び出しラッパーは、呼び出しラッパーの型のオブジェクトです。

  • ターゲット オブジェクトは、呼び出しラッパー オブジェクトによって保持される呼び出し可能オブジェクトです。

擬似関数 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_typeT::result_type のシノニムになります。

  • それ以外の場合は、メンバー result_type は存在しません。

すべての呼び出しラッパーには、移動コンストラクターとコピー コンストラクターが含まれています。 単純な呼び出しラッパーとは、代入演算子を含んでおり、そのコピー コンストラクター、移動コンストラクター、代入演算子が例外をスローしない呼び出しラッパーです。 転送呼び出しラッパーとは、任意の引数リストを使用して呼び出すことができ、ラップされた呼び出し可能オブジェクトに引数を参照として渡す呼び出しラッパーです。 すべての右辺値引数は右辺値参照として渡され、左辺値引数は左辺値参照として渡されます。

メンバー

クラス

名前 説明
bad_function_call function オブジェクトが空であるために、そのオブジェクトでの operator() の呼び出しが失敗したことを示す場合にスローされる例外を記述するクラス。
binary_negate 指定した二項関数の戻り値を否定するメンバー関数を提供するクラス テンプレート。
(C++17 では非推奨)
binder1st 指定した値に二項関数の 1 番目の引数をバインドして二項関数オブジェクトを単項関数オブジェクトに変換するコンストラクターを提供するクラス テンプレート。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
binder2nd 指定した値に二項関数の 2 番目の引数をバインドして二項関数オブジェクトを単項関数オブジェクトに変換するコンストラクターを提供するクラス テンプレート。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
boyer_moore_horspool_searcher
boyer_moore_searcher
const_mem_fun_ref_t 参照引数による初期化を行うときに、引数を使用しない const メンバー関数を単項関数オブジェクトとして呼び出せるようにするアダプター クラス。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
const_mem_fun_t ポインター引数による初期化を行うときに、引数を使用しない const メンバー関数を単項関数オブジェクトとして呼び出せるようにするアダプター クラス。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
const_mem_fun1_ref_t 参照引数による初期化を行うときに、1 つの引数を使用する const メンバー関数を二項関数オブジェクトとして呼び出せるようにするアダプター クラス。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
const_mem_fun1_t ポインター引数による初期化を行うときに、1 つの引数を使用する const メンバー関数を二項関数オブジェクトとして呼び出せるようにするアダプター クラス。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
default_searcher
function 呼び出し可能オブジェクトをラップするクラス。
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 参照引数による初期化を行うときに、1 つの引数を使用する non_const メンバー関数を二項関数オブジェクトとして呼び出せるようにするアダプター クラス。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
mem_fun1_t ポインター引数による初期化を行うときに、1 つの引数を使用する 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 指定した値に二項関数の 1 番目の引数をバインドして二項関数オブジェクトを単項関数オブジェクトに変換するアダプターを作成するヘルパー テンプレート関数。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
bind2nd 指定した値に二項関数の 2 番目の引数をバインドして二項関数オブジェクトを単項関数オブジェクトに変換するアダプターを作成するヘルパー テンプレート関数。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
bit_and 2 つのパラメーターのビットごとの AND (バイナリ operator&) を返します。
bit_not パラメーターのビットごとの補数 (operator~) を返します。
(C++14 で追加されました)
bit_or 2 つのパラメーターのビットごとの OR (operator|) を返します。
bit_xor 2 つのパラメーターのビットごとの XOR (operator^) を返します。
cref 引数から const の reference_wrapper を構築します。
invoke
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 を構築します。
スワップ 2 つの function オブジェクトを交換します。

構造体

名前 説明
binary_function 二項関数オブジェクトを提供する派生クラスによって継承される可能性がある型を定義する空の基底クラス。
(C++ 11 で非推奨となり、C++ 17 で削除されています)
divides クラスには、指定した値型の要素に対して算術演算 (除算) を実行する定義済みの関数オブジェクトが用意されています。
equal_to 指定した型の値がその型の他の値と等しいかどうかをテストする二項述語。
greater 指定した型の値がその型の他の値よりも大きいかどうかをテストする二項述語。
greater_equal 指定した型の値がその型の他の値以上であるかどうかをテストする二項述語。
less 指定した型の値がその型の他の値よりも小さいかどうかをテストする二項述語。
less_equal 指定した型の値がその型の他の値以下であるかどうかをテストする二項述語。
logical_and クラスには、指定した値型の要素に対して論理積演算を実行する定義済みの関数オブジェクトが用意されており、結果の真偽をテストします。
logical_not クラスには、指定した値型の要素に対して論理否定演算を実行する定義済みの関数オブジェクトが用意されており、結果の真偽をテストします。
logical_or クラスには、指定した値型の要素に対して論理和演算を実行する定義済みの関数オブジェクトが用意されており、結果の真偽をテストします。
minus クラスには、指定した値型の要素に対して算術演算 (減算) を実行する定義済みの関数オブジェクトが用意されています。
modulus クラスには、指定した値型の要素に対して算術演算 (剰余) を実行する定義済みの関数オブジェクトが用意されています。
multiplies クラスには、指定した値型の要素に対して算術演算 (乗算) を実行する定義済みの関数オブジェクトが用意されています。
negate クラスには、要素の値の負数を返す定義済みの関数オブジェクトが用意されています。
not_equal_to 指定した型の値がその型の他の値と等しくないかどうかをテストする二項述語。
plus クラスには、指定した値型の要素に対して算術演算 (加算) を実行する定義済みの関数オブジェクトが用意されています。
unary_function 単項関数オブジェクトを提供する派生クラスによって継承される可能性がある型を定義する空の基底クラス。
(C++ 11 で非推奨となり、C++ 17 で削除されています)

Objects

名前 説明
_1.._M 置き換え可能な引数のプレースホルダーです。

演算子

名前 説明
operator== 呼び出し可能オブジェクトの等価比較を否定します。
operator!= 呼び出し可能オブジェクトの非等価比較を否定します。

関連項目

ヘッダー ファイル リファレンス
C++ 標準ライブラリ内のスレッド セーフ
C++ 標準ライブラリ リファレンス