C 17 の部分的なクラス テンプレート引数演繹
C 17 のクラス テンプレート引数演繹 (CTAD) を使用すると、コンパイラーは次のテンプレート引数を演繹できます。提供された引数。この機能では自動推論が可能ですが、テンプレート引数を部分的に指定し、残りをコンパイラに推論させることはできますか?
C 17 の部分推論
現在、CTAD では、オール オアナッシングのテンプレート引数の指定が必要です。ただし、P1021R0 などの提案を通じて部分控除を導入する試みも行われています。これらの提案は受け入れられていませんが、エイリアス テンプレート (P1814) と集計 (P1816) のサポートは C 20 作業草案に組み込まれています。
回避策
ネイティブの部分演繹がない場合、考えられる回避策は次のとおりです:
<code class="cpp">template<class T, class U> using NewBase2 = Base<T, U, double>; // Usage void func() { NewBase2<bool, int> val(1, 2); }</code>
Base のエイリアスとして NewBase2 を導入することで、テンプレート引数 (T と U) を部分的に指定しながら、コンパイラーが残りの引数を演繹できるようにすることができます。 one (V) は func() での使用法に基づいています。
注: この回避策では、エイリアス テンプレート引数を明示的に指定する必要があり、CTAD の目的をある程度無効にします。
以上がC 17 はクラス テンプレート引数控除 (CTAD) でテンプレート引数を部分的に控除できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。