typename

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

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

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

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

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

参考:Effective C++ 42項

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です