abs(-500);のようにして呼び出します。}を生成してくれます。コンパイラから見るとテンプレート関数は「コード生成のテンプレートとなる関数」なので、テンプレート関数と呼ばれるわけです。共通です(つまり、abs(-500)を呼び出したならその関数内のT型変数はすべてint型になる)そこで、二種類以上の違った型を引数に取りたいときは次のようにします。0;}また、以下のような特徴があります。独自に定義した型に対して適用するとどうなるでしょうか。おかしなことが起こり暴走する」か、「そもそもコンパイルが通らない」かのどちらかです。正解は後者で、暴走したりすることはありません。生成し、コンパイルしようと試みて失敗します。定義されているならば、このテンプレート関数は独自に定義した型に対しても適用できるということで、非常に汎用性の高い関数を定義することができます。T>のTを決定しますが、これを強制的に指定することもできます。生成させることができます。†また、関数を定義する時に、「int型に対してだけ違う処理をしたい」といったことも可能です。次のようにint型に特化した関数を別につくってやります。...)よりも後ろに書くことです。前に書くとエラーになる)これは以下のようにしても実現できそうですが、微妙に動作が異なることがあります。endl;とした場合です。したものを生成する場合」と、「オーバーロードされたint型の関数を呼び出す場合」があります。使えばこのような曖昧さは回避できます。†テンプレート関数と同様に、テンプレートクラスというものがあります。これは「メンバの型が実行時に定まるクラス」です。(テンプレート関数は「引数及び返り値の型が実行時に決まる関数」でした。)次のようにして定義します。意味はテンプレート関数と同じです。(これはtemplateであって、Tというのは型の名前ですよ、という意味。詳しくはテンプレート関数の項を参照)このテンプレートクラスを使うには、次のようにします。指定した型になります。)またテンプレート関数と同様に、二つ以上の型を取ることもできます。†typenameには、一般の引数と同じように、デフォルトの値を指定することができます。型名>として指定しておきます。2);としたのと同じことになります。省略できないのと同じ、と思っておきましょう。)また、次のようなこともできます。y;}};このとき、次の3つは同じ意味です。