C++におけるテンプレート関数の使用方法


テンプレート関数は、異なるデータ型やクラスに対して汎用的に使用することができます。これにより、同じコードを再利用することができ、より柔軟なプログラミングが可能になります。

まず、テンプレート関数の定義方法を見てみましょう。以下は、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);

テンプレート関数の呼び出し時に、<データ型>の形式で明示的にデータ型を指定します。上記の例では、intdoubleがそれぞれの呼び出しに対して指定されています。

さらに、テンプレート関数はクラスにも使用することができます。以下は、テンプレートクラスとテンプレート関数を組み合わせた例です。

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関数に渡しています。

このように、テンプレート関数を使用することで、異なるデータ型やクラスに対して汎用的なコードを作成することができます。ぜひ、これらの例を参考にして、自分自身でもテンプレート関数を活用してみてください。