2009-04-12 22 views
1

vectorlistなどのコンテナクラスを使用する場合、要素の型はvector<type>::value_typeと書くことができます。テンプレート引数で定義された型を使用する

ただし、次のコード

template<class container> 
void foo(container& c) 
{ 
    typedef container::value_type elementtype; 
    elementtype b; 
}

はエラー "expected initializer before ‘elementtype’" で失敗します。 コンテナの型がテンプレートの引数として指定されている場合、または要素の型を余分なテンプレートの引数として指定する必要がある場合、要素の型を推論することはできますか?

答えて

12

必要な型名キーワードが欠落している:

typedef typename container::value_type elementtype; 

containerこのテンプレートで依存名なので、コンパイラは、コンテナかどうかを知る方法がない:: VALUE_TYPEは常にあるためですタイプは、containerの選択によって異なる場合があります。

確かにこの質問はどこかのFAQですか?

編集:http://www.parashift.com/c++-faq-lite/templates.html#faq-35.18

関連する問題