声明一个类型
template<typename C>void print2nd(const C& container){ if(container.size() >= 2){ C::const_iterator it(container.begin()); ++it; int value = *it; cout<<value; }} 发生编译错误是因为编译器不知道 typename C::const_iterator it(container.begin()); 嵌套从属名称事实上类型 嵌套从属名称是需要用 template<typename C>void f(const C& container, typename C::iterator iter); 如果你把 template<typename C>void f(typename const C& container, typename C::iterator iter); 错误输出: error: expected a qualified name after 'typename' 一个例外模板中的嵌套从属名称是需要 template<typename T>class Derived: public Base<T>::Nested{ // 继承基类列表中不允许声明`typename`public: explicit Derived(int x): Base<T>::Nested(x){ // 基类初始化列表不允许声明`typename` typename Base<T>::Nested tmp; // 这里是要声明的 }}; |
|