2007年7月17日火曜日

STLをはじめる前に

忘れないうちにメモメモ。

STL(Standard Template Library)
まずこいつを学ぶにあたっての基礎知識をぶち込んだ

C言語には無かった、 template という概念
正直良くわからない。
ただ、今のところ型を不定にしてクラスや関数を宣言できると覚えておくことにする。

template関数

template<typename T>
T add(T a, T b) {
return a + b;
};

T という任意の型の和を計算して返す関数
関数の宣言時は型を意識していない
どの型が来ても +演算子が定義されていれば使えます

C言語やと下のように二つの関数を宣言しないといけなかった
-----------
int add_int(int a, int b) {
return a + b;
}

double add_double(double a, double b) {
return a + b;
}
-----------

それを一つの関数として宣言する事ができた。
なかなか優秀な奴や。

といってもプログラマが楽になるだけで、
コンパイル時に型にあわせて複数の関数を宣言しているので
バイナリサイズはほとんど変わらないみたい
使い方を間違うと大幅にサイズが増える事もあるようです

関数を複数定義しなくてよいのでソースコードの見た目もすっきりしますね。
(目が慣れるまでは気持悪いんですけど…)

実際にtemplate関数を使ってみよう
----
#include <cstdio>

template<typename T>
T add(T a, T b) {
return a + b;
};

int main(void) {
printf("%d\n", add((int)1, (int)3));
printf("%lf\n", add((double)1.5, (double)2.666));
return 0;
}
----
明示的にint型とdouble型にキャストして渡してみた
ちゃんとコンパイル通って実行できるはずです。

まだまだ便利さが良くわかりませんが…
次回は実際にvector classでも使ってみますかな。
.

0 件のコメント:

ラベル