C 17 では、クラス テンプレート引数の演繹 (CTAD) により、クラス テンプレート引数の演繹 (CTAD) により、引数に渡される引数に基づいてテンプレート引数を演繹できます。関数またはコンストラクター。ただし、このプロセスでは現在、引数をすべて指定するか、まったく指定する必要がありません。
テンプレート引数を部分的に指定し、残りの引数を推定できるかどうかという疑問が生じます。例:
<code class="cpp">Base<V = bool> val1(1, 4.); // U & V deduced --> Base<int, double, bool> Base<T = bool, T =int> val2(5.); // V deduced --> Base<bool, int, double></code>
ただし、次のようなエイリアス テンプレートを使用してこれを実現しようとすると、コンパイル エラーが発生します。
<code class="cpp">template<class T, class U> using Base2 = Base<T, U, double>; void func() { NewBase2 val(1, 2); }</code>現在、CTAD一部控除には対応しておりません。この機能を提案した論文 P1021R0 は受理されていません。ただし、C 20 にはエイリアス テンプレート (P1814) および集約 (P1816) のサポートが含まれる場合があり、これにより回避策が提供される可能性があります。
以上が## C 17 は部分的なクラス テンプレートの引数の演繹を達成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。