C 17 では、テンプレート推論ガイドの概念が導入され、型推論を強化するための強力なツールを開発者に提供します。この記事では、テンプレート推論ガイドの本質を解明し、その目的と実装について説明します。
テンプレート推論ガイドは、テンプレート引数の推論方法をコンパイラに通知する命令です。コンストラクターの初期化。これらは、テンプレートの型パラメータに直接対応しない可能性があるコンストラクター引数に基づいてテンプレート パラメータを指定する手段を提供します。
テンプレート推論ガイドは、次のような場合に不可欠になります。テンプレートの型は、コンストラクター引数の型だけから推測することはできません。 std::vector クラスは古典的な例を提供します。そのコンストラクターは反復子のペアを受け入れますが、テンプレートの型 (T) は iterator_traits 特性に基づいて推定する必要があります。テンプレート推論ガイドがないと、明示的な型指定が必要になり、冗長でエラーが発生しやすくなります。
テンプレート推論ガイドは次の構文に従います。
template<typename... Args> ReturnType(Args...) -> Template<DeducedArguments...>;
たとえば、ベクトル反復子のペア コンストラクターは次のように宣言されます。次のように:
template<typename Iterator> vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;
テンプレート推論ガイドはクラスとコンストラクターを超えて拡張され、集合体初期化での使用を可能にします:
template<typename T> struct Thingy { T t; }; Thingy(const char *) -> Thingy<std::string>; Thingy thing{"A String"}; //thing.t is a 'std::string'
テンプレート推論ガイドは次のことを行うことに注意することが重要です。コンストラクターと同等ではありません。これらは初期化中にテンプレートのタイプのみを決定しますが、実際の構築は推論ガイドの影響を受けません。
以上がC 17 テンプレート演繹ガイドはどのように型推論を強化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。