ホームページ >バックエンド開発 >C++ >C 17 テンプレート演繹ガイドは、テンプレート引数の推論をどのように簡素化しますか?

C 17 テンプレート演繹ガイドは、テンプレート引数の推論をどのように簡素化しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-09 14:11:15642ブラウズ

How Do C  17 Template Deduction Guides Simplify Template Argument Inference?

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

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