[英]How to define the type of a member of an iterator class to work with STL container methods?
[英]How do I use the iterator type when inheriting publicly from an STL container class?
我正在编写一个程序,在该程序中我从内置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
简而言之,编译器在解析类型时不会在内部依赖名称中查找。
此常见问题解答条目与此问题有关 。 另外,请务必通读此Stack Overflow问题的答案 。 要修复它,请使用typename
。
template<typename T>
class Set : public set<T> {
public:
bool func()
{
typename set<T>::iterator it;
typename set<T>::iterator it2;
}
};
但实际上,在这种情况下,您应该使用composition而不是heritageace ,例如:
template<typename T>
class Set
{
public:
bool func()
{
typename set<T>::iterator it;
typename set<T>::iterator it2;
}
private:
std::set<T> set;
};
从不应该从STL容器类继承任何东西,因为这些类的析构函数不是虚拟的,因此,每次实例化派生类的实例时,都会发生内存泄漏。
正如In Silico在其评论中建议的那样,请给Set
一个成员变量set
而不要继承它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.