「複合」概念が で定義されている例はたくさんありますが、 が使用されている例はあり&&
ません||
。これは、 を使用する意味があるかどうか疑問に思います||
。||
using を使用すると、オーバーロード (アドホック ポリモーフィズム) に似た効果を持つ概念を指定できますが、一連の可能性は閉じられているように思えます。
「プリミティブな」概念のセット C1,...,CN について、次のように書くことは有効ですか?
C1 || ... || CN
「複合」概念として?
「複合」概念が で定義されている例はたくさんありますが、 が使用されている例はあり&&
ません||
。これは、 を使用する意味があるかどうか疑問に思います||
。||
using を使用すると、オーバーロード (アドホック ポリモーフィズム) に似た効果を持つ概念を指定できますが、一連の可能性は閉じられているように思えます。
「プリミティブな」概念のセット C1,...,CN について、次のように書くことは有効ですか?
C1 || ... || CN
「複合」概念として?
制約
制約は、テンプレート引数の要件を指定する一連の論理操作です。これらは、requires-expressions (以下を参照) 内に表示され、概念の本体として直接表示されます。9 種類の制約があります。
- 接続詞
- 選言
- 述語制約
- 式の制約 (requires-expression のみ)
- 型制約 (require 式のみ)
- 暗黙の変換制約 (require 式のみ)
- 引数推定制約 (require 式のみ)
- 例外制約 (require 式のみ)
- パラメータ化された制約 (require 式のみ)
と
選言
制約 P と Q の論理和は、P || として指定されます。Q. 2 つの制約の論理和は、いずれかの制約が満たされる場合に満たされます。論理和は左から右に評価され、短絡されます (左の制約が満たされている場合、右の制約へのテンプレート引数の推論は試行されません)。operator|| のユーザー定義のオーバーロード 制約論理和では許可されていません。
制約ではほとんどすべての定数式を使用できます ( を含む||
)。唯一の制限は、これらの式が返さなければならないことbool
です。
の用途の 1 つは||
、共通のインターフェイスを共有することが知られている型のセットを定義することです。たとえば、Integral ( std::is_integral
) は、多数の同じタイプの制約 ( ) の論理和として定義できますis_same<T, int>
。ただし、これを行うことはお勧めしません。概念を付加的な方法で定義する必要があります。