C++ named requirements: Predicate
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Predicate 要件は、 BooleanTestable 値を返す呼び出し可能オブジェクトを記述します。
Predicate は通常、入力データ(個々のオブジェクト/コンテナ)と述語を受け取り、入力データに対して呼び出されて次の動作を決定するアルゴリズムで使用されます。C++標準ライブラリにおける述語の使用例としては以下のようなものがあります:
- std::all_of , std::any_of , std::none_of は要素の配列と述語を入力として受け取ります。個々の入力要素に対して述語を呼び出し、全ての/いずれかの/いずれの要素に対しても述語がtrueを返す場合にtrueを返します。
- std::find_if 要素のシーケンスと述語を受け取る。述語が true に等しい値を返す、シーケンス内の最初の要素を返す。
上記で説明したアルゴリズム機能の記述は大まかなもので、 Predicate を簡単な言葉で説明することを意図しています。詳細な情報については、個別のページを参照してください。
言い換えれば、アルゴリズムが
Predicate
pred
とイテレータ
first
を受け取る場合、次のような構文を用いてイテレータ
first
が指す型のオブジェクトを指定された述語でテストできるべきです:
if
(
pred
(
*
first
)
)
{
/*...*/
}
。
関数オブジェクト
pred
は、逆参照されたイテレータを通じて非const関数を適用してはならず、
const
引数を受け入れなければなりません。この動作は、引数が
const
であるか非
const
であるかに関わらず同じでなければなりません。この関数オブジェクトは、関数へのポインタまたは適切な関数呼び出し演算子を持つ型のオブジェクトである可能性があります。
要件
|
このセクションは不完全です
理由: 実際の要件をより適切に記述する必要があります |
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3031 | C++98 |
const
値に対する要件が不十分だった
|
要件を強化 |
関連項目
|
(C++20)
|
呼び出し可能な型がブール述語であることを指定する
(concept) |