2014-05-04 45 views
1

根據this question,應添加typename以告知編譯器iterator是一種類型(是否正確?什麼時候應該在模板函數中使用typename?

template <typename T> 
void print(vector<T> &v) { 
    for (typename vector<T>::const_iterator it=v.begin(); it!=v.end(); ++it) 
    cout<<*it<<endl; 
} 

兩個問題:

  1. 下應在typename添加什麼情況?有人能給我另一個例子嗎?

  2. Can auto在C++ 11中取代所有這些typename xxx個案嗎?

+0

這是'auto'有用的典型例子之一。 – chris

+0

1)請參閱上面的鏈接。 2)是的,這是'auto'的一大好處,它取代了許多這些煩人的事情。 –

+1

當然,如果你想從'auto'得到正確的類型,你需要'cbegin'。 – chris

回答

0
  1. 如果你指的是一個類型名,其確切含義取決於模板參數。
  2. 並非所有,但很多。 auto必須能夠推斷/推斷該類型。在這樣的事情:

    typename T:foo_t var; 
    

例如,它不能。

+0

感謝您的直接答覆。我將花時間閱讀上面的鏈接 - 相當長的一篇文章:) – Deqing

+0

這基本上是一個幫助解析器的提示。 – kec

相關問題