2.11まとめ
2.11 まとめ
•クラステンプレートは、1つ以上の型パラメーターを開いたままで実装されるクラスです。
クラステンプレートは、次のプロパティを持つクラスです。クラスの実装では、1つ以上の型パラメーターを指定できません。
•クラステンプレートを使用するには、オープンタイプをテンプレート引数として渡します。次に、クラステンプレートがこれらの型に対してインスタンス化(およびコンパイル)されます。
クラステンプレートを使用するために、テンプレートの実際のパラメーターとして指定されていない型を渡すことができます;コンパイラーは、型に基づいてクラステンプレートをインスタンス化します。
•クラステンプレートの場合、呼び出されるメンバー関数のみがインスタンス化されます。
クラステンプレートの場合、呼び出されるメンバー関数のみがインスタンス化されます。
•クラステンプレートを特定のタイプに特化できます。
クラステンプレートは、特定のタイプに特化できます。
•特定のタイプのクラステンプレートを部分的に特化できます。
特定のタイプのローカル特殊化クラステンプレートを使用できます。
•C ++ 17以降、クラステンプレート引数はコンストラクターから自動的に推定できます。
C ++ 17以降では、クラステンプレート引数をコンストラクターから自動的に派生させることができます。
•集約クラステンプレートを定義できます。
集約クラステンプレートを定義できます
•テンプレートタイプの呼び出しパラメータは、値によって呼び出されるように宣言されている場合は減衰します。
渡すパラメーターを値で宣言すると、テンプレートタイプの仮パラメータータイプが縮退(減衰)します。
•テンプレートは、グローバル/名前空間スコープまたはクラス宣言内でのみ宣言および定義できます。
テンプレートは、グローバル/名前空間スコープまたはクラス宣言内でのみ宣言および定義できます。
1. C ++ 17は、クラス引数テンプレートの推論を導入しました。これにより、テンプレート引数がコンストラクターから派生できる場合、テンプレート引数をスキップできます。これについては、40ページのセクション2.9で説明します。
1. C ++ 17では、クラステンプレート引数の派生が導入されていますが、それらがコンストラクターから推測できる場合は、テンプレート引数をスキップできます。これについては、40ページのセクション2.9で説明します。
2.テンプレート化されたエンティティです。181ページのセクション12.1を参照してください。
2.テンプレート化されたエンティティです。181ページのセクション12.1を参照してください。
3.意図的に「型定義」の代わりにtypedefという単語を使用する。キーワードtypedefは、もともと「タイプ定義」を提案することを目的としていました。ただし、C ++では、「型の定義」は実際には何か別のものを意味します(たとえば、クラスまたは列挙型の定義)。代わりに、typedefは、typedefで実行できる既存のタイプの代替名(「エイリアス」)と考えてください。
3.「型定義」の代わりに、typedefという単語を意図的に使用します。キーワードtypedefは元々「型定義」を提案していました。ただし、C ++では、「型の定義」は実際には別のことを意味します(たとえば、クラスまたは列挙型の定義)。代わりに、typedefは、typedefで定義できる既存のタイプの代替名(「エイリアス」)と見なす必要があります。
4.エイリアステンプレートは、typedefテンプレートと呼ばれる場合があるため、typedefテンプレートと呼ばれることがあります(誤って)。
4.エイリアステンプレートは、(誤って)typedefテンプレートと呼ばれることがあります。これは、typedefと同じ役割を果たすためです(テンプレートを生成できる場合)。
5.メンバーはタイプなので、ここではタイプ名が必要です。詳細については、67ページのセクション5.1を参照してください。
5.クラスメンバーがタイプの場合、typenameを追加する必要があります(詳細については、67ページのセクション5.1を参照してください)。
6.さらに悪いことに、1つの整数引数を初期サイズとして取るベクトルコンストラクターがあるため、初期値が5のスタックの場合、:elems(elem)を使用すると、ベクトルの要素の初期サイズは5要素になります。
6.さらに悪いことに、vectorには整数パラメーターを持つコンストラクターがあり、これはベクターのサイズを初期化するために使用されます。したがって、初期値が5のスタックの場合、elems(elem)を使用すると、サイズが5要素のベクトルが得られます。