テンプレートは、さまざまな型の値を扱えるようにするためのC++の機能です。 C/C++では、原則的に厳密に型を指定してプログラミングしますが、C++では、任意の型を受け入れることができる関数やクラスを作成することもでき、 そのような機能をテンプレートといいます。
関数テンプレート(Function Template)は、任意の型の引数と戻り値を扱うことができる関数を記述したものです。 関数テンプレートの最初はキーワードtemplateで、 そのあとに< >で囲ったテンプレート引数を指定します。そして、そのあとに関数を定義します。
関数テンプレートの基本的な書式は次のとおりです。
template <typename T>
T functionName(T parameter1, T parameter2, ...) {
// code
}
Tは実行時に実際の型(int、double、float、クラス名など)があてはめられます。 たとえば、任意の型のふたつの引数の値を比較して大きいほうを返すテンプレート関数maximum()は次のように定義します。
template <typename T>
T maximum(const T& lhs, const T& rhs)
{
return lhs > rhs ? lhs : rhs;
}
このテンプレート関数をintの値を比較するために呼び出すときには次のようにします。
maximum<int>(n1, n2);
次の例はテンプレート関数maximum()を定義して、2種類のデータ型で使う例です。
#include <iostream>
template <typename T>
T maximum(const T& lhs, const T& rhs)
{
return lhs > rhs ? lhs : rhs;
}
int main()
{
// int型の値の入力
int n1, n2;
std::cout << "2個の整数:";
std::cin >> n1 >> n2;
// int型の値の比較
std::cout << n1 << "と" << n2 << "で大きいほうは:";
std::cout << maximum<int>(n1, n2) << std::endl;
// double型の値の入力
double v1, v2;
std::cout << "2個の実数:";
std::cin >> v1 >> v2;
// int型の値の比較
std::cout << v1 << "と" << v2 << "で大きいほうは:";
std::cout << maximum<double>(v1, v2) << std::endl;
return 0;
}
実行例を次に示します。
2個の整数:23 56
23と56で大きいほうは:56
2個の実数:321.65 426.854
321.65と426.854で大きいほうは:426.854