我正在制作一个程序,在该程序中我从内置STL容器类Set
公开继承我的set
类。我必须使用迭代器类型,同时为自己的Set
类制作一些其他专用功能,如stl
set类中所定义。
现在我的问题是:在成员函数中声明迭代器类型的变量的语法是什么?我已经试了:
template<typename T>
class Set : public set<T> {
public:
bool func()
{
iterator it,it2;
}
};
但是编译器无法识别迭代器类型。请告诉我使用STL
set
类中的迭代器类型的语法。 最佳答案
编译器抱怨是因为它不知道iterator
实际上是set<T>
的成员。 set<T>
称为依赖类型,因为它取决于类型参数T
。简而言之,编译器在解析类型时不会在内部依赖名称中查找。
This FAQ entry is relevant to this question。另外,请务必通读the answers to this Stack Overflow question。要修复它,请使用typename
。
template<typename T>
class Set : public set<T> {
public:
bool func()
{
typename set<T>::iterator it;
typename set<T>::iterator it2;
}
};
但实际上,在这种情况下,您应该是using composition instead of inheritnace,如下所示:
template<typename T>
class Set
{
public:
bool func()
{
typename set<T>::iterator it;
typename set<T>::iterator it2;
}
private:
std::set<T> set;
};
关于c++ - 从STL容器类公开继承时,如何使用迭代器类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9147053/