从STL容器类公开继承时,如何使用迭代器类型?

Zoh*_*aib 2 c++ iterator stl

我正在制作一个程序,我Set从一个内置的STL容器类公开继承我的类set.我必须使用迭代器类型,同时为我自己的Set类创建一些其他专用函数,如stlset类中所定义.

现在我的问题是:在我的成员函数中声明迭代器类型变量的语法是什么?我已经试了:

  template<typename T>
  class Set : public set<T> {
         public:
         bool func()
         {
            iterator it,it2;
         }
   };
Run Code Online (Sandbox Code Playgroud)

但编译器无法识别迭代器类型.请告诉我使用stl set类中的迭代器类型的语法.

In *_*ico 5

编译器抱怨,因为它不知道它iterator实际上是一个成员set<T>.set<T>是什么称为依赖类型,因为它取决于类型参数T.简而言之,编译器在解析类型时不会查看依赖名称.

此FAQ条目与此问题相关.此外,请务必阅读此Stack Overflow问题的答案.要修复它,请使用typename.

template<typename T> 
class Set : public set<T> { 
public: 
    bool func() 
    { 
        typename set<T>::iterator it;
        typename set<T>::iterator it2; 
    } 
}; 
Run Code Online (Sandbox Code Playgroud)

但实际上,你应该在这种情况下使用合成而不是继承,如下所示:

template<typename T>
class Set
{
public:
    bool func()
    {
        typename set<T>::iterator it;
        typename set<T>::iterator it2;
    }
private:
    std::set<T> set;
};
Run Code Online (Sandbox Code Playgroud)