<functional>
関数オブジェクト (ファンクターとも呼ばれます) とそれらのバインダーの作成に役立つ C++ 標準ライブラリ関数を定義します。 関数オブジェクトは、operator()
を定義するオブジェクトの種類です。 関数オブジェクトは関数ポインターとしても使用できますが、一般的に、関数オブジェクトは、関数呼び出しの実行中にアクセスできる追加情報を格納するために使用されます。
要件
ヘッダー:<functional>
名前空間: std
解説
アルゴリズムでは、単項と二項という 2 種類の関数オブジェクトが使用されます。 単項関数オブジェクトは 1 つの引数を必要とし、二項関数オブジェクトは 2 つの引数を必要とします。 関数オブジェクトと関数ポインターは述語としてアルゴリズムに渡すことができますが、関数オブジェクトは適応性があり、C++ 標準ライブラリのスコープ、柔軟性、効率が向上します。 たとえば、値をアルゴリズムに渡す前に、その値を関数にバインドする必要がある場合は、関数ポインターを使用できないことがあります。 関数アダプターを利用すると、関数ポインターが、値にバインドできる適応性のある関数オブジェクトに変換されます。 ヘッダー <functional> には、メンバー関数を適応性のある関数オブジェクトとして呼び出すことができるメンバー関数アダプターも含まれます。 関数が引数と戻り値の型を指定する入れ子になった型宣言を持っている場合、それらの関数は適応性があります。 関数オブジェクトとそのアダプターを使用すると、C++ 標準ライブラリで既存のアプリケーションをアップグレードでき、ライブラリと C++ プログラミング環境との統合に役立てることができます。
<機能>での関数オブジェクトの実装には、標準の関数オブジェクトの特殊化であり、テンプレート パラメーターを受け取関数引数の完全な転送と結果の完全な戻り値を実行する、transparent 演算子 functors が含まれます。 これらのテンプレートの特殊化では、算術演算子のファンクター、比較演算子のファンクター、論理演算子のファンクター、ビットごとの演算子のファンクターを呼び出すときに、引数の型を指定する必要はありません。 ユーザー独自の型または異なる種類の型の組み合わせに対して算術演算子、比較演算子、論理演算子、ビットごとの演算子をオーバーロードしてから、透過的な演算子のファンクターを関数の引数として使用できます。 たとえば、ユーザー独自の型 MyType が operator<
を実装する場合、型 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_type
はT::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!= | 呼び出し可能オブジェクトの非等価比較を否定します。 |