template<class T>
concept queryable = destructible<T>;
概要
queryableは、型Tがクエリ可能オブジェクトの制約を満たすことを表す説明専用のコンセプトである。
クエリ可能オブジェクト(queryable object)
クエリ可能オブジェクトは、クエリオブジェクトをキーとして対応する値を保持する、読み取り専用のKey/Valueデータ構造とみなせる。
execution::env<>{}: 空のクエリ可能オブジェクトexecution::prop(q, v): キーqと対応値vを保持する最小のクエリ可能オブジェクトexecution::env{...}: 複数のKey/Valueを保持するクエリ可能オブジェクトqueryableコンセプトを満たすユーザ定義クラスのオブジェクト
実行制御ライブラリでは、下記のオブジェクトがクエリ可能オブジェクトとされる。
- Senderに関連付けられた属性(attributes)オブジェクト(
execution::get_envで取得) - Receiverに関連付けられた環境(environment)オブジェクト(
execution::get_envで取得) - Schedulerオブジェクト自身
クエリオブジェクト(query object)
クエリオブジェクトは、クエリ可能オブジェクトに対する問い合わせ(query)を行うカスタマイゼーションポイントオブジェクトである。
説明用のクエリオブジェクトq、クエリ可能オブジェクトenv、引数パックargsとしたとき
- 問い合わせ式
q(env, args...)は、void型であってはならない。 - 問い合わせ式
q(env, args...)は、クエリオブジェクトや引数を変更せず、等しさを保持(equality-preserving)する。 - 式
env.query(q, args...)が適格であれば、問い合わせ式q(env, args...)と等価である。
モデル
説明用のenvをEnv型のオブジェクトとする。
呼び出し可能オブジェクトqと部分式パックargsに対して、requires { q(env, args...) }がtrueであれば、q(env, args...)がqに課されるセマンティック要件を満たす場合に、Envはqueryableのモデルである。
説明専用エンティティ
式MAKE-ENV
説明用のクエリオブジェクトqと式vに対して、式MAKE-ENV(q, v)はqueryableを満たす型の式envとなり、下記を満たす。
env.query(q)の結果がvと等しい。- 明に規定されない限り、
envが有効の間はenv.query(q)のオブジェクトも有効である。
式JOIN-ENV
説明用のクエリ可能オブジェクトenv1, env2、クエリオブジェクトq、パック式asに対して、式JOIN-ENV(env1, env2)はqueryableを満たす型の式env3となり、式env3.query(q, as...)は下記と等価である。
- 適格であるならば、式
env1.query(q, as...) - そうではなく、適格であるならば、式
env2.query(q, as...) - そうでなければ、式
env3.query(q, as...)は不適格
備考
Senderに関連付けられたクエリ可能オブジェクトは「属性(attributes)」と呼ばれるが、実行制御ライブラリの仕様記述ではReceiverの「環境(environment)」と合わせてEnv型や識別子名envとして包括的に言及される。
バージョン
言語
- C++26