C 17 テンプレート推論ガイド: 簡単な説明
テンプレート推論ガイドとは?
テンプレート推論ガイドは、C 17 で導入された機能であり、コンパイラの実行を支援します。コンストラクターのテンプレート引数を推論します。これらは、コンストラクターの引数とその型をテンプレート パラメーターにマッピングする方法を指定する方法を提供します。
なぜ (いつ) それらが必要ですか?
テンプレート推論ガイドが必要ですコンストラクター引数からのテンプレート引数の推定を引数の型から直接行うことができない場合。たとえば、反復子のペアからベクトルを初期化するには、反復子の基礎となる値の型に関する知識が必要です。
それらを宣言する方法?
テンプレート推論ガイドは、次を使用して宣言されます。次の構文:
template <template-argument-list> class-template id (function-parameter-list) -> deduced-type;
ここで、template-argument-list はテンプレート引数を示しますfunction-parameter-list はコンストラクターの引数を表し、deduced-type は結果として推定されたテンプレートの型です。
例:
std を考えてみましょう。反復子のペアを取る :vector コンストラクター:
template <typename Iterator> void func(Iterator first, Iterator last) { vector v(first, last); }
型 T を推定するにはベクトルの値については、テンプレート推論ガイドを使用する必要があります。
template <typename Iterator> vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;
このガイドは、指定されたイテレータ型の std::iterator_traits の value_type として T を推論するようにコンパイラに指示します。
控除による集合体の初期化ガイド:
テンプレート推論ガイドは集合体の初期化でも使用できます:
template <typename T> struct Thingy { T t; }; Thingy(const char *) -> Thingy<std::string>; Thingy thing{"A String"}; //thing.t is a `std::string`.
この例では、推論ガイドにより、推論中に const char* を使用した Thingy の初期化が可能になります。 T as std::string.
注: 推論ガイドテンプレート引数を推論するためにのみ使用されます。実際の初期化プロセスは、選択した推論ガイドに関係なく、以前と同じルールに従います。
以上がC 17 テンプレート演繹ガイドは、テンプレート引数の推論をどのように簡素化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。