C++ templateとは?テンプレート

テンプレートの説明の前に、
なぜテンプレート機能が用意されているか、
概要を示します。

#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つの関数にまとめられています。

このように、関数内容が同じでデータ型だけが違う処理をする場合に、
テンプレートと言う機能が有効な記述方法となります。

この例ではテンプレート関数と言う機能を使っていますが、
テンプレート関数の詳しい解説はテンプレート関数をご覧ください。