Rest Term

typename

業務でつまづいたことメモ。

テンプレートパラメータの宣言でclassとtypenameの違いはないが、typenameにはもう一つの意味があって、これを使わなければならない場所がある。例えば、STLコンテナを引数に取る関数テンプレートを作る時、

C++には、テンプレート内にあるネストされた依存名は、特に指示されていなければ型名とは解釈されないというルールがある。T::const_iteratorを型名と解釈させるためにはコンパイラに指示を与える必要があるが、ここで使うのがtypename。

typenameはネストされた依存名でのみ使う。

ただし、派生クラスを定義するときの基底クラスの指定と、初期化子リスト内での基底クラスの指定ではtypenameは使わないので注意。

参考:Effective C++ 42項

あわせて読む:

 

Tags:

Comments

No comments so far.

  • Leave a Reply
     
    Your gravatar
    Your Name