C++プログラミングにおいて、テンプレートは非常に重要な概念であり、テンプレートを使うことで、汎用的なコードを書くことができます。
そこで本記事では、C++のテンプレートの基礎から応用までわかりやすく解説します。
目次から探す
テンプレートとは何か
C++におけるテンプレートとは、汎用的なデータ型や関数を定義するための仕組みです。具体的には、クラスや関数の定義時に、その中で使用されるデータ型や引数の型を決めずに、後から指定することができます。
テンプレートの基本的な使い方
C++におけるテンプレートは、汎用的なコードを書くための機能です。テンプレートを使用することで、同じような処理を行う関数やクラスを複数作成する必要がなくなります。
関数テンプレート
関数テンプレートは、引数の型に応じて異なる処理を行う関数を定義するために使用されます。以下は、2つの引数の和を計算する関数テンプレートの例です。
template <typename T>
T add(T a, T b) {
return a + b;
}
この関数テンプレートでは、<typename T>
という記述があります。これは、T
という型パラメーターを定義しています。T
は任意の型であることができます。例えば、以下のように呼び出すことができます。
int result1 = add(1, 2); // result1 = 3(int型関数として処理)
double result2 = add(1.5, 2.5); // result2 = 4.0(double型関数として処理)
このように、引数の型に応じて適切な処理が行われるため、同じような処理を行う関数を複数作成する必要がありません。
クラステンプレート
クラステンプレートは、異なるデータ型に対して同じような操作を行うクラスを定義するために使用されます。以下は、スタック(後入れ先出し)構造を実現するクラステンプレートの例です。
template <typename T>
class Stack {
private:
T data[100];
int top;
public:
Stack() : top(-1) {}
void push(T value) {
data[++top] = value;
}
T pop() {
return data[top--];
}
};
このクラステンプレートでは、<typename T>
という記述があります。これは、T
という型パラメーターを定義しています。例えば、以下のように呼び出すことができます。
Stack<int> stack1; // int型用のスタックオブジェクト生成
stack1.push(10);
stack1.push(20);
int value1 = stack1.pop(); // value1 = 20
int value2 = stack1.pop(); // value2 = 10
Stack<double> stack2; // double型用のスタックオブジェクト生成
stack2.push(3.14);
double value3 = stack2.pop(); // value3 = 3.14
このように、異なるデータ型でも同じ操作が可能です。
次のページテンプレートの特殊化