typename
少し古いC++では,テンプレート型を定義するときに
template<class T>のように書いていたんだけど,
class TだとTとして受け入れられるのはクラス型のオブジェクトインスタンスだけのような誤解を生みそうなので
最近になってtypenameというキーワードが追加された.
たとえば次の例は絶対値を返す汎用関数abs()を定義しているのだけど,
これはTとしてintやfloatのような基本型がくるのが普通な感じなので,
template<class T>よりtemplate<typename T>のほうがしっくりくる.
template<typename T>
T abs(T n) {
return n > 0 ? n : -n;
}
キーワードtypenameのかわりにclassを使ってもよくて,
template<typename T>とtemplate<class T>は同じ意味になる.
もちろんtemplate<class T>と書いたときはクラス型だけということではなく,
今までどおり,template<class T>と書いてもintなどの基本型を受け入れることができる.