記事ディレクトリ
序文
コンパイラにモデルを指示し、コンパイラがそのモデルを使用してさまざまなタイプに応じたコードを生成できるようにします テンプレートは
関数テンプレートとクラス テンプレートに分割されます
今日は関数テンプレートとクラステンプレートの基本的な操作をいくつか紹介します。
1. 関数テンプレート
1.1 関数テンプレートの概念
関数テンプレートは関数ファミリーを表します。関数テンプレートは型とは関係がありません。使用時にパラメータ化され、実際のパラメータの型に従って関数の特定の型バージョンが生成されます。
1.2 関数テンプレートの形式
template<typename T1, typename T2,...,typename Tn>
戻り値 type 関数名 (パラメータリスト) {}
1.3 テンプレートの原則:
関数テンプレートは設計図であり、関数そのものではなく、コンパイラがそれを使用して特定の種類の関数を生成するための型です。つまり、実際には、テンプレートは、実行すべき繰り返しの処理をコンパイラーに渡すことになります。
コンパイラーのコンパイル段階では、テンプレート関数を使用するために、コンパイラーは、渡される実際のパラメーターのタイプに応じて、呼び出しに対応するタイプの関数を推測して生成する必要があります。例: double 型の関数テンプレートを使用する場合、コンパイラーは実際のパラメーターの型の推論を通じて T を double 型として判断し、double 型を特別に処理するコードを生成します。同様のことが文字にも当てはまります。タイプ
1.4 関数テンプレートのインスタンス化
関数テンプレートが異なる型のパラメーターとともに使用される場合、それは関数テンプレートのインスタンス化と呼ばれます。テンプレートパラメータのインスタンス化は、暗黙的なインスタンス化と明示的なインスタンス化に分けられます。
- 暗黙的なインスタンス化: コンパイラに実際のパラメータに基づいてテンプレート パラメータの実際の型を推定させます。
- 明示的なインスタンス化: 関数名の後の <> 内にテンプレート パラメーターの実際の型を指定します。
2、クラステンプレート
2.1 クラステンプレートの定義形式
template<class T1, class T2, ..., class Tn>
class 类模板名
{
// 类内成员定义
};