ホームページ  >  記事  >  バックエンド開発  >  C 17 はクラス テンプレート引数控除 (CTAD) でテンプレート引数を部分的に控除できますか?

C 17 はクラス テンプレート引数控除 (CTAD) でテンプレート引数を部分的に控除できますか?

DDD
DDDオリジナル
2024-10-25 06:38:02579ブラウズ

Can C  17 Partially Deduct Template Arguments in Class Template Argument Deduction (CTAD)?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。