テンプレート関数の機能は
複数の型に対応した関数を
つくれることです(^^)
テンプレート関数とは、引数や戻り値の型が曖昧な状態の関数です。
そのためコンパイラが、テンプレート関数の呼び出し方を判断して、
具体的な関数に置き換えて処理するのです(*^^)v 賢い!
template<class T>
T GetMaxValue(T num1, T num2)
{
T temp;
if (num1 > num2) temp = num1;
else temp = num2;
return temp;
}
この class T とか書いてあるところが、テンプレート引数というものです。
別に T である必要はありませんが、分かりやすいし無難に倣っておくのが
良いのではないかと... テンプレートのTということで。(^^;)
仮の型名なので、関数を使用するときに int や double に置き換わります。
ここでは、関数の引数と戻り値に使っています。
関数の呼び出し方法は、特に変わった点はなく
普通に呼び出すだけで使えます(^^)
では、サンプルプログラムで見てみましょう。
include <stdio.h>
#include <iostream>
using namespace std;
// 与えられた引数のうち大きいほうの値を返します
template<class T>
T GetMaxValue(T num1, T num2)
{
T temp;
if (num1 > num2) temp = num1;
else temp = num2;
return temp;
}
int main(void)
{
int a = 10;
int b = 15;
double c = 3.14;
double d = 1.23;
printf("a : %d, b : %d\n", a, b);
int ans = GetMaxValue(a, b); //int型を指定した呼び出し
printf("ans : %d\n", ans);
cout << "c : " << c << ", d : " << d << endl;
double ans2 = GetMaxValue(c, d); //double型を指定した呼び出し
cout << "ans2 : " << ans2 << endl;
return 0;
}
実行結果
# ./test
a : 10, b : 15
ans : 15
c : 3.14, d : 1.23
ans2 : 3.14
Cでは、int型用、double型用などと2つの関数を
用意しなければなりませんでしたが、
このように一つにまとめることができました。
さすが、C++
インクリメントされてるので、ちゃんと進んでるのがわかりますね(^^;)
今日の名言
取り越し苦労をして先のことばかりに目を向け、まだ嵐がやってこない
うちから気をもんで、どうやって防ごうかとうろたえるようでは、神に対する
信頼を失ってしまう。まだこれからどうなるかわからないのに、打つ手や
失敗した時のことまで考えて、わが身を地獄に陥れるとき、我々は
恐怖心を追放してくれるあの「完全な愛」(神)から、完全に見放されて
いるのだ。
ヘンリー・ウォード・ビーチャー
まず確かな事実を手元に集めることだ。公平な目でありとあらゆる
事実を集めないうちには、問題に手も触れないことにしよう。
デール・カーネギー
ついに起こらなかった害悪のために、我々はいかに多くの時間を
費やしたことか!
トーマス・ジェファーソン