C++/テンプレート

出典: フリー教科書『ウィキブックス(Wikibooks)』
< C++
ナビゲーションに移動 検索に移動

テンプレート[編集]

テンプレートはクラスと組み合わせて使うことが多い考え方です。しかし、ここでは関数に対するテンプレートを用いて、テンプレートを導入します。

テンプレートに近い機能は最近のJavaでも導入されています。Javaでは、この機能はジェネリックスと呼ばれます。

テンプレートはパラメータとして型を与える機能です。例えば、同じ機能をint型、double型などに対して作成したい場合があります。この時には、型をパラメータとして与えることが出来ると便利です。テンプレートは、

template <typename T, ...> Tを用いた関数定義

という表記を用いることで定義することが出来ます。ここで、Tは区別するために用いられる型名で、どのような文字列を用いてもかまいません。テンプレートを用いて定義された関数を用いるには、

関数名 <型名, ...> (引数)

として呼び出すことが出来ます。型名は曖昧でなければ省略することが出来ます。

 template <typename T>
 T max (T a, T b){ return (a > b)?a :b ;}

これは、2つの数を与えて大きい方を取り出すための関数です。実際にこの関数を用いる時には、

 max (1,2);
 max (1.0, 3.0);
 max<double>(1,3.0); // 明示的に型を指定

などとします。

C言語では、これらの機能を実現する際にマクロを用いて、

 #define max(a, b) ((a > b)?(a) :(b))

とすることが通例でした。しかし、ここではaとbが異なる型を用いているときの扱いがテンプレートを用いている場合と比べてわかりづらくなります。そのため、C++では出来る限りテンプレートを使う方がよいでしょう。