テンプレートは、さまざまな型の値を扱えるようにするためのC++の機能です。 C/C++では、原則的に厳密に型を指定してプログラミングしますが、C++では、任意の型を受け入れることができる関数やクラスを作成することもでき、 そのような機能をテンプレートといいます。
クラステンプレート(Class Template)は、任意の型のデータを扱うことができるクラスを記述したものです。 クラステンプレートの最初には「template < class T >」を記述し、そのあとに通常のクラス定義を記述します。 ただし、クラスの中では具体的なデータ型は使わずにデータ型はTにします。
template <class T> class ClassName {
// クラス定義委
// この中でデータ型はTを使う
};
たとえば、任意の型の座標値(x, y)を保存するクラスは次のように定義します。この定義には、座標値を表示するメンバー関数Print()も記述しますが、 これも型に依存しない形式で記述します。
template <class T> class Point {
T x;
T y;
public:
Point(T x, T y)
{
this->x = x;
this->y = y;
};
std::string Print()
{
return std::to_string(x) + ", " + std::to_string(y);
};
};
次の例はテンプレートクラスPointを定義して使うプログラムの例です。
#include <iostream>
#include <string>
template <class T> class Point {
T x;
T y;
public:
Point(T x, T y)
{
this->x = x;
this->y = y;
};
std::string Print()
{
return std::to_string(x) + ", " + std::to_string(y);
};
};
int main()
{
// int型の座標値
Point<int> ip = Point<int>(52, 30);
std::cout << ip.Print() << std::endl;
// double型の座標値
Point<double> vp = Point<double>(12.3, 34.5);
std::cout << vp.Print() << std::endl;
return 0;
}
実行例を次に示します。
52, 30
12.300000, 34.500000