テンプレート関数は、異なるデータ型やクラスに対して汎用的に使用することができます。これにより、同じコードを再利用することができ、より柔軟なプログラミングが可能になります。
まず、テンプレート関数の定義方法を見てみましょう。以下は、2つの引数を受け取り、それらを足し合わせるテンプレート関数の例です。
template <typename T>
T add(T a, T b) {
return a + b;
}
この例では、typename T
という部分がテンプレートパラメータの宣言です。ここで使用するデータ型は任意のものになります。
次に、このテンプレート関数を使用する方法を見てみましょう。以下は、int
型とdouble
型の引数を渡して呼び出す例です。
int result1 = add<int>(5, 10);
double result2 = add<double>(3.14, 2.71);
テンプレート関数の呼び出し時に、<データ型>
の形式で明示的にデータ型を指定します。上記の例では、int
とdouble
がそれぞれの呼び出しに対して指定されています。
さらに、テンプレート関数はクラスにも使用することができます。以下は、テンプレートクラスとテンプレート関数を組み合わせた例です。
template <typename T>
class MyContainer {
private:
T value;
public:
MyContainer(T val) : value(val) {}
T getValue() { return value; }
};
template <typename T>
T addValues(MyContainer<T> container1, MyContainer<T> container2) {
return container1.getValue() + container2.getValue();
}
この例では、MyContainer
というテンプレートクラスを定義しています。MyContainer
は任意のデータ型を格納することができます。
そして、addValues
というテンプレート関数では、MyContainer
型の引数を受け取り、それらの値を足し合わせて返します。
MyContainer<int> container1(5);
MyContainer<int> container2(10);
int result = addValues(container1, container2);
上記の例では、MyContainer<int>
型のオブジェクトを作成し、addValues
関数に渡しています。
このように、テンプレート関数を使用することで、異なるデータ型やクラスに対して汎用的なコードを作成することができます。ぜひ、これらの例を参考にして、自分自身でもテンプレート関数を活用してみてください。