代碼如下:
#include <iostream><br />#include <list><br />template <typename T><br />class CCustomerList<br />{<br />public:<br />void push(T item)<br />{<br />m_customer.push_back(item);<br />}<br />void show_item()<br />{<br />CCIterator it = m_customer.begin();<br />while(it != m_customer.end())<br />{<br />std::cout<<(*it)<<std::endl;<br />++it;<br />}<br />}<br />private:<br />typedef std::list<T> CustomerContainer;<br />typedef typename CustomerContainer::iterator CCIterator;<br />CustomerContainer m_customer;<br />};<br />int main(int argc, char *argv[])<br />{<br />CCustomerList<int> c;<br />for(int i=0; i<10; ++i) c.push(i);<br />c.show_item();<br />return 0;<br />}
這裡說的是CCustomerList裡的
typedef typename CustomerContainer::iterator CCIterator;
語句。在這條語句中必須加上typename關鍵字,不然編譯時間會報錯。根據《effective STL》裡的解釋:CustomerContainer::iterator 是一個依賴形式型別參數T的一種類型,所以必須在它前面放上typename這個詞。