ページ 11

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

Posted: 2014年10月14日(火) 14:40
by dic
お久しぶりです。

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

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

使い方はある程度まで理解しました。
たとえば、関数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;
}
とか、結局は特殊化すると思うんです。


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

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

Posted: 2014年10月14日(火) 15:50
by h2so5
stringはそのままcoutに渡せますよ。
http://ideone.com/VUIv9f

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

コード:

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

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

Posted: 2014年10月15日(水) 07:30
by dic
ありがとうございました。