Effective C++ Item 422009年08月27日 22時17分20秒

  • テンプレートを宣言する時に使う class と typename は同じ意味だ。
  • typename はクラス宣言の中でタイプを宣言する時に用いる。

nested dependent typename がある時に typename を使う。文脈によっては、変数の定義なのか関数の呼び出しなのかが区別がつかない時がある。それを区別する為に、typename を用いる。

以下の例では、x が C::const_iterator を指すポインタなのか、C::const_iterator と x の掛け算なのかの明確な区別は出来ない。


template<typename C>
void porint2nd(const C& container)
{
    C::const_iterator * x;
}

このでは例は、

template<typename C>
void porint2nd(const C& container)
{
    typename C::const_iterator * x;
}

とする。

他にも基底クラスの型を指定するときにも用いる。


template<typename T>
class Derived: public Base<T>::Nested
{
    public:
        explicit Derived(int x):Base<T>::Nested(x)
        {
            typename Base<T>::Nested temp;
            ...
        }
}

前回次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2009/08/27/4542697/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。