C 17 でのテンプレート パラメーターの Auto の多用途性の活用
C 17 テンプレート パラメーターでの auto の導入により、その機能が拡張され、いくつかの利点が得られます。変数宣言における最初の役割を超えた機能。この機能により、テンプレート コードの柔軟性とシンプルさが向上します。
Auto の自然拡張:
前述のとおり、テンプレート パラメーターの auto は、auto の自然拡張に従います。他のコンテキストでの型の推論。 auto を指定すると、インスタンス化時に型推論をコンパイラに委任し、明示的に定義する必要がなくなります。
たとえば、提供されたコード スニペットでは次のようになります。
auto v1 = constant<5>; auto v2 = constant<true>; auto v3 = constant<'a'>;
型v1、v2、v3 の値は、指定されたリテラルに基づいて、それぞれ int、bool、char として自動的に推論されます。 value.
可変個引数テンプレート:
テンプレート パラメーターでの auto のもう 1 つの利点は、可変個引数テンプレートでの使用にあります。可変引数テンプレートでは引数の可変数が許可され、その型の推論が自動的に簡素化されます。
コンパイル時のリストの例を考えてみましょう:
template <auto ... vs> struct HeterogenousValueList {};
このテンプレートは任意の数でインスタンス化できます。
using MyList1 = HeterogenousValueList<42, 'X', 13u>;
対照的に、C 以前では、それぞれの型が自動的に推定されます。 17 では、異種の値リストに対する同等の実装では、追加のテンプレートで引数をラップする必要があります。
型推定の合理化:
テンプレート パラメーターの自動により、型推定のプロセスが簡素化されます。 、より簡単になります。これは、複合型または可変長引数テンプレートを使用する場合に特に便利です。
例:
template <auto value> constexpr auto constant = value;
値の型を明示的に定義する代わりに、auto を使用すると、コンパイラーは指定された値からそれを推測できます。インスタンス化時。
constexpr auto const IntConstant42 = constant<42>;
強化柔軟性:
最後に、auto はテンプレート パラメーターに柔軟性を追加します。型を明示的に指定する必要がなくなることで、より幅広いシナリオに対応できる、より汎用的なテンプレート定義が可能になります。
たとえば、値リストの場合、auto を使用すると、異種と同種の両方の作成が可能になります。個別のテンプレートを必要とせずにリストを作成できます。
以上がテンプレート パラメーターの C 17 の「auto」はどのように型推定を簡素化し、柔軟性を強化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。