テンプレートの説明の前に、
なぜテンプレート機能が用意されているか、
概要を示します。
#include <iostream>
using namespace std;
void showint(int data);
void showdouble(double data);
void main() {
showint(100);
showdouble(10.5);
}
void showint(int data)
{
cout << data << '\n';
}
void showdouble(double data)
{
cout << data << '\n';
}
このプログラムは、数値を出力するだけの単純なプログラムです。
整数値を出力するshowint関数と、
小数値を出力するshowdouble関数があります。
注目すると、それぞれの関数内は、全く同じ記述内容です。
同じ内容なのに別々に関数を用意するのは、
少し無駄な気がするでしょう。
C++言語には、関数多重定義(オーバーロード)機能がありますので、
それを使って上記のプログラムを改良してみましょう。
#include <iostream>
using namespace std;
void show(int data);
void show(double data);
void main() {
show(100);
show(10.5);
}
void show(int data)
{
cout << data << '\n';
}
void show(double data)
{
cout << data << '\n';
}
このプログラムでは、
showintと、showdoubleの2つの関数を同じ関数名showと変更し、
整数型と小数型用の引数を取る別々の関数を多重定義しました。
これによってキレイなプログラムに改良されました。
しかし、 それぞれの関数内は、
全く同じ記述内容である事には変わりありません。
まだ改良する余地があります。
そこで、テンプレートと言う機能が登場します。
テンプレート機能を使ってプログラムを改良してみます。
#include <iostream>
using namespace std;
template <typename T> void show(T data);
void main() {
show(100);
show(10.5);
}
template <typename T> void show(T data)
{
cout << data << '\n';
}
このプログラムは、テンプレートを使ってshow関数を記述した例です。
どうでしょう?
前のプログラムと比べてコードの記述量がずいぶん減りました。
show関数が、テンプレート機能によって1つの関数にまとめられています。
このように、関数内容が同じでデータ型だけが違う処理をする場合に、
テンプレートと言う機能が有効な記述方法となります。
この例ではテンプレート関数と言う機能を使っていますが、
テンプレート関数の詳しい解説はテンプレート関数をご覧ください。