嵌套模板类的Typedef

时间:2012-01-29 14:21:23

标签: c++ templates

在.hpp文件中我有

template <SomeEnum E>
class SomeClass {
   //many definitions
   class InnerClass {
       //Some stuff
   };
   typedef std::map<std::string, InnerClass> InnerMapType;
};

在.cpp文件中我有

template <SomeEnum E>
SomeClass<E>::~SomeClass() {
   InnerMapType::iterator iter;
   //Iterate over resources
}

编译器在InnerMap::iterator iter;中给出了语法错误,声称分号在它之前是预期的。如果我删除template <SomeEnum E>部分编译器很高兴。我忘记了什么,我该如何使它发挥作用?

1 个答案:

答案 0 :(得分:3)

查看dependent names

要解决您的问题,您需要使用typename:

template <SomeEnum E>
SomeClass<E>::~SomeClass() {
   typename InnerMapType::iterator iter;
   //Iterate over resources
}