キーワードtypename

少し古いC++では,テンプレート型を定義するときに template<class T>のように書いていたんだけど, class TだとTとして受け入れられるのはクラス型のオブジェクトインスタンスだけのような誤解を生みそうなので 最近になってtypenameというキーワードが追加された. たとえば次の例は絶対値を返す汎用関数abs()を定義しているのだけど, これはTとしてintfloatのような基本型がくるのが普通な感じなので, 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などの基本型を受け入れることができる.


はたいたかし
2001-07-21
トップ > 開発ツール > C++