- [meta exposition-only]
- execution[meta header]
- concept[meta id-type]
- std[meta namespace]
- cpp26[meta cpp]
template<class T>
concept queryable = destructible<T>;- destructible[link /reference/concepts/destructible.md]
queryableは、型Tがクエリ可能オブジェクトの制約を満たすことを表す説明専用のコンセプトである。
クエリ可能オブジェクトは、クエリオブジェクトをキーとして対応する値を保持する、読み取り専用の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)を行うカスタマイゼーションポイントオブジェクトである。
説明用のクエリオブジェクト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のモデルである。
説明用の部分式q, tag、パックargsに対して、式TRY-QUERY(q, tag, args...)は適格であるならばAS-CONST(q).query(tag, args...)と等価な式である。そうでなければ、args...が評価されることを除いてAS-CONST(q).query(tag)と等価な式である。
説明用の部分式q, tag、パックargsに対して、tagのdecayed型がget_scheduler_tまたはget_domain_tのとき、式HIDE-SCHED(q)はo.query(tag, args...)が不適格となるオブジェクトoとする。そうでなければ、q.query(tag, args...)とする。
説明用のクエリオブジェクトq、部分式v、部分式のパックargsに対して、式MAKE-ENV(q, v)はqueryableを満たす型の式envとなり、下記を満たす。
env.query(q, args...)の結果がvと等しい。- 明に規定されない限り、
envが有効の間はenv.query(q, args...)のオブジェクトも有効である。
説明用のクエリ可能オブジェクト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