こんにちは!
最近、音楽ばかり聴いている気が……(笑)
アップテンポな曲を聴いているとタイピングも進む進む!
さて、私、一昨日の授業で汎用関数についてやっていたのですが……如何せん理解が出来ず!
「なんだこいつは。出来ることは分かったけれどどゆこと!?」
とりあえずプログラムをしたけれどこのままだと身にならないし、そもそも理解できていない!
……というわけで、今日は汎用関数についてパラパラと。
そもそも汎用ってなんやねん!と思い調べると
「いろいろな方面に用いる」意味だそうです。
……色々な方面に用いる関数……?
何でも使える関数ってことかい?
ここで、授業中に入力していたサンプルコードを……
//汎用関数(加算)
T Add(T a, T b)
{
return a + b;
}
{
int b = 20;
float bb = 8.8f;
cout << Add(aa, bb) << endl;
∞----------------------------------------------------∞
この汎用関数Addは、数字を加算するもので。
出力結果も
30
14.8
となったので正しい値になりました。
……いや、待て待て。どういうこと?
私の今までの技術能力では
∞---------------------------------------------------∞
//2つの整数の加算
int Add(int a, int b)
{
return a + b;
}
//2つの数字の加算
float Add(float a, float b)
{
return a + b;
}
∞---------------------------------------------------∞
関数の書き方はこうなるはず。
言ったら悪いけれど引数の型も戻り値の型も違うものね!仕方ないよね!面倒くさいけれどこればっかりは……
これは関数をオーバーロードさせて、引数の型と数で判断しているやり方だったんだけれど、今回はたった一つの関数でこの2つの関数の役割をこなしてしまった……なんて便利なんですか!!
template <class T>
T Add(T a, T b)
{
return a + b;
}
まず、このtemplateというものが「汎用関数」である宣言。
仮想関数でいうvertualですよね、きっと。
ポイントはその次の<class T>
Tという名前は何でもいいんですよね!変数名みたいな感じ。
「……って、Tって何者なんすか……」
それが、なんとですよ。
このTは何の型にも変換できるんですって!
なんですと!?
template <class T>
T Add(T a, T b)
{
return a + b;
}
{
int b = 20;
float bb = 8.8f;
{
return a + b;
}
{
return a + b;
}