2009-04-12 78 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

你缺少所需的typename關鍵字:

typedef typename container::value_type elementtype; 

這是因爲container在這個模板從屬名稱,所以編譯器有沒有辦法知道容器:: VALUE_TYPE是否始終是一個鍵入與否,因爲它可能取決於container的選擇。

這個問題肯定是一個常見問題嗎?

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