C++を勉強しているとtemplateの存在を知ります。
巷のページでも解説されていますが、
あえてここで軽く読んでもらってtemplateの感覚をつかみ、
勉強するときにスムーズに習得できたらいいなと思い記事を書きました。
読み物としてどうぞ。
[0回]
以下のプログラムを理解すると、templateはもうマスターしたも同然です。
#define SWAP(type,a,b) {\
type hako; \
hako=a; \
a =b; \
b =hako; \
}
int main()
{
int num1=893,num2=24;
printf("%d.%d\n",num1,num2);
SWAP( int, num1, num2 );
printf("%d.%d\n",num1,num2);
return 0;
}
/* -出力-
893,24
24,893
*/
値を交換するSWAPマクロです。第一引数に型、第二第三引数に交換する変数。
第一引数に型情報を持たせることでint以外にもflaotや構造体、クラスなどを指定することができます。
型を引数としてマクロに渡すのは最初は違和感ありますが、読み解いてくれると嬉しいです。
templateは「型が違うだけで処理は全く一緒」という時に効果を発揮します。
ではSWAPマクロをtemplate関数で記述すると以下の様になります。
// 呼び出し元の変数を値を変更する必要があるので
// 引数は参照で受け取っています。
template<class Type>
void swap( Type& a, Type& b )
{
Type hako;
hako = a;
a=b;
b=hako;
}
int main()
{
int num1=893,num2=24;
printf("%d,%d\n",num1,num2);
swap<int>(num1,num2);
printf("%d,%d\n",num1,num2);
return 0;
}
swap<型名>(変数1,変数2);
この型名のところにintやfloat、クラスや構造体などを指定できます。
templateは関数・クラス・クラス内のメンバ関数などに適応できます。
templateは勉強すればするほど深いです。
深く勉強されたい方は「 Modern C++ Design」という本をどうぞ。未知の世界が広がってます。
ジュンク堂のC++の場所の一番上の段にあります。
by リーダ和田
PR
COMMENT
無題
もし良ければ
次の俺の記事で少しだけ補足して良い?
無題