関数オブジェクト
関数オブジェクトは関数呼び出し演算子が定義されている任意のオブジェクトです。 C++ は多数の組み込みの関数オブジェクトと新しい関数オブジェクトの作成や操作に対するサポートが提供されます。
目次 |
[編集] 関数ラッパー
std::function は任意の関数オブジェクトの格納に対するサポートを提供します。
(C++11) |
指定された関数呼び出しシグネチャを持つ任意の型の呼び出し可能なオブジェクトをラップします (クラステンプレート) |
(C++11) |
空の std::function を呼び出したときに投げられる例外 (クラス) |
(C++11) |
メンバポインタから関数オブジェクトを作成します (関数テンプレート) |
[編集] 関数呼び出し
std::invoke は任意の Callable オブジェクトを指定した引数で呼び出すことができます。
(C++17) |
任意の Callable なオブジェクトを指定された引数で呼びます (関数テンプレート) |
[編集] 恒等
std::identity は恒等関数オブジェクトです。 引数を変更せずに返します。
(C++20) |
引数を変更せずに返す関数オブジェクト (クラス) |
[編集] 関数の部分適用
std::bind_front および std::bind は関数の部分適用、すなわち新しい関数を生成するための関数への引数束縛に対するサポートを提供します。
(C++20) |
可変個の引数を順番通りに関数オブジェクトに束縛します (関数テンプレート) |
(C++11) |
関数オブジェクトに1つ以上の引数をバインドします (関数テンプレート) |
(C++11) |
オブジェクトが std::bind 式であるか、 std::bind 式として使用できることを表します (クラステンプレート) |
(C++11) |
オブジェクトが標準のプレースホルダであるか、プレースホルダとして使用できることを表します (クラステンプレート) |
名前空間
std::placeholders で定義 | |
(C++11) |
std::bind 式におけるバインドされない引数のためのプレースホルダ (定数) |
[編集] 否定子
std::not_fn は呼び出し可能なオブジェクトの結果を否定する関数オブジェクトを作成します。
(C++17) |
保持する関数オブジェクトの結果の否定を返す関数オブジェクトを作成します (関数テンプレート) |
[編集] 検索子
いくつかの文字列検索アルゴリズムを実装する検索子が提供され、直接または std::search と共に使用することができます。
(C++17) |
標準 C++ ライブラリの検索アルゴリズムの実装 (クラステンプレート) |
(C++17) |
ボイヤー・ムーア検索アルゴリズムの実装 (クラステンプレート) |
ボイヤー・ムーア・ホースプール検索アルゴリズムの実装 (クラステンプレート) |
[編集] 参照ラッパー
参照ラッパーを使用すると参照引数をコピー可能な関数オブジェクトに格納できます。
(C++11) |
CopyConstructible かつ CopyAssignable な参照ラッパー (クラステンプレート) |
(C++11)(C++11) |
引数から推定される型の std::reference_wrapper を作成します (関数テンプレート) |
(C++20)(C++20) |
std::reference_wrapper にラップされている参照型を取得します (クラステンプレート) |
[編集] 演算子関数オブジェクト
一般的な算術演算子および論理演算子を表す関数オブジェクトがいくつか定義されています。
算術演算子 | |
x + y を実装する関数オブジェクト (クラステンプレート) | |
x - y を実装する関数オブジェクト (クラステンプレート) | |
x * y を実装する関数オブジェクト (クラステンプレート) | |
x / y を実装する関数オブジェクト (クラステンプレート) | |
x % y を実装する関数オブジェクト (クラステンプレート) | |
-x を実装する関数オブジェクト (クラステンプレート) | |
比較 | |
x == y を実装する関数オブジェクト (クラステンプレート) | |
x != y を実装する関数オブジェクト (クラステンプレート) | |
x > y を実装する関数オブジェクト (クラステンプレート) | |
x < y を実装する関数オブジェクト (クラステンプレート) | |
x >= y を実装する関数オブジェクト (クラステンプレート) | |
x <= y を実装する関数オブジェクト (クラステンプレート) | |
論理演算子 | |
x && y を実装する関数オブジェクト (クラステンプレート) | |
x || y を実装する関数オブジェクト (クラステンプレート) | |
!x を実装する関数オブジェクト (クラステンプレート) | |
ビット演算子 | |
x & y を実装する関数オブジェクト (クラステンプレート) | |
x | y を実装する関数オブジェクト (クラステンプレート) | |
x ^ y を実装する関数オブジェクト (クラステンプレート) | |
(C++14) |
~x を実装する関数オブジェクト (クラステンプレート) |
[編集] 制約付き比較関数オブジェクト (C++20)
C++20 では制約付きの比較関数オブジェクトが定義されます。 等しい演算子 (ranges::equal_to
および ranges::not_equal_to
) は引数の型が equality_comparable_with をモデル化することを要求します。 関係比較演算子 (ranges::less
、 ranges::greater
、 ranges::less_equal
および ranges::greater_equal
) は引数の型が totally_ordered_with をモデル化することを要求します。
(C++20) |
x == y を実装する関数オブジェクト (クラス) |
(C++20) |
x != y を実装する関数オブジェクト (クラス) |
(C++20) |
x < y を実装する関数オブジェクト (クラス) |
(C++20) |
x > y を実装する関数オブジェクト (クラス) |
(C++20) |
x <= y を実装する関数オブジェクト (クラス) |
(C++20) |
x >= y を実装する関数オブジェクト (クラス) |
[編集] 古いバインダとアダプタ
以前提供されていた関数オブジェクトサポートのためのいくつかのユーティリティは C++11 で非推奨になり C++17 で削除され、またいくつかは C++17 で非推奨になり C++20 で削除されました。
基本 | |
(C++11で非推奨)(C++17で削除) |
アダプタ互換な単項関数の基底クラス (クラステンプレート) |
(C++11で非推奨)(C++17で削除) |
アダプタ互換な二項関数の基底クラス (クラステンプレート) |
バインダ | |
(C++11で非推奨)(C++17で削除) |
二項引数とその引数の1つを保持する関数オブジェクト (クラステンプレート) |
(C++11で非推奨)(C++17で削除) |
二項関数に引数を1つ束縛します (関数テンプレート) |
関数アダプタ | |
(C++11で非推奨)(C++17で削除) |
単項関数へのポインタに対するアダプタ互換なラッパー (クラステンプレート) |
(C++11で非推奨)(C++17で削除) |
二項関数へのポインタに対するアダプタ互換なラッパー (クラステンプレート) |
(C++11で非推奨)(C++17で削除) |
関数ポインタからアダプタ互換な関数オブジェクトを作成します (関数テンプレート) |
(C++11で非推奨)(C++17で削除) |
オブジェクトへのポインタを使用して呼ぶことができる、引数なしまたは引数1個のメンバ関数へのポインタに対するラッパー (クラステンプレート) |
(C++11で非推奨)(C++17で削除) |
メンバ関数ポインタから、オブジェクトへのポインタを使用して呼ぶことができるラッパーを作成します (関数テンプレート) |
(C++11で非推奨)(C++17で削除) |
オブジェクトへの参照を使用して呼ぶことができる、引数なしまたは引数1個のメンバ関数へのポインタに対するラッパー (クラステンプレート) |
(C++11で非推奨)(C++17で削除) |
メンバ関数ポインタから、オブジェクトへの参照を使用して呼ぶことができるラッパーを作成します (関数テンプレート) |
否定子 | |
(C++17で非推奨)(C++20で削除) |
保持する単項述語の否定を返すラッパー関数オブジェクト (クラステンプレート) |
(C++17で非推奨) (C++20で削除) |
保持する二項述語の否定を返すラッパー関数オブジェクト (クラステンプレート) |
(C++17で非推奨)(C++20で削除) |
カスタム std::unary_negate オブジェクトを構築します (関数テンプレート) |
(C++17で非推奨)(C++20で削除) |
カスタム std::binary_negate オブジェクトを構築します (関数テンプレート) |