代码如下:
#include <iostream> #include <list> template <typename T> class CCustomerList { public: void push(T item) { m_customer.push_back(item); } void show_item() { CCIterator it = m_customer.begin(); while(it != m_customer.end()) { std::cout<<(*it)<<std::endl; ++it; } } private: typedef std::list<T> CustomerContainer; typedef typename CustomerContainer::iterator CCIterator; CustomerContainer m_customer; }; int main(int argc, char *argv[]) { CCustomerList<int> c; for(int i=0; i<10; ++i) c.push(i); c.show_item(); return 0; }
这里说的是CCustomerList里的
typedef typename CustomerContainer::iterator CCIterator;
语句。 在这条语句中必须加上typename关键字,不然编译时会报错。 根据《effective STL》里的解释: CustomerContainer::iterator 是一个依赖形式类型参数T的一种类型,所以必须在它前面放上typename这个词。