テンプレートの使いどころ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

テンプレートの使いどころ

#1

投稿記事 by dic » 10年前

お久しぶりです。

いろいろ事情があってロムってました。

本題ですが、いまテンプレートの勉強をしているのですが、
なかなか使いどころが思いつきません。

使い方はある程度まで理解しました。
たとえば、関数Print() をテンプレート化して

コード:

template <typename T> void Print( T t )
{
  count << t << endl;
}
として汎用的な関数を作れますが、私の知るところでは、このTにくる型が
int,double,stringくらいのものしか知らず、これくらいだったら
わざわざ難しくしなくてもいいんじゃないかと思ってます。
(できるんならやったほうがいいの?)
でも、実際は string 型がきたとした場合、上のコードではダメなので
特殊化すると思います。

コード:

void Print( string str )
{
    printf( "%s\n", str.c_str() );
    cout << str << endl; // これがいいんだけど・・・
}
さらにオリジナルのクラスだったら

コード:

void Print( CLASS class )
{
    cout << class.GetName() << endl;
}
とか、結局は特殊化すると思うんです。


それで、テンプレートプログラミング経験者としてどういった場合に
特に効力を発揮するのでしょうか?
ある例をあげていただいて、参考までに聞きたいです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: テンプレートの使いどころ

#2

投稿記事 by h2so5 » 10年前

stringはそのままcoutに渡せますよ。
http://ideone.com/VUIv9f

オリジナルのクラスの場合はオペレーターのオーバーロードを利用します。

コード:

ostream& operator<< (ostream& s, const Myclass& c)
{
	s << c.Name;
}

dic
記事: 658
登録日時: 14年前
住所: 宮崎県
連絡を取る:

Re: テンプレートの使いどころ

#3

投稿記事 by dic » 10年前

ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る