[英]Can 'iterator' type just subclass 'const_iterator'?
在关于迭代器的另一个问题之后,我对自定义容器有一些疑问。 在我的容器中, iterator
是const_iterator
的子类,因此我可以从非const转换为const“免费”。 但这是允许的,还是有这样的设置有任何缺点或非工作方案?
是的,这很好。 例如,这就是VC10为vector
迭代器实现的结构。 请参阅<vector>
_Vector_iterator
和_Vector_const_iterator
。
顺便说一句,编写迭代器很难。 值得花时间学习和使用boost :: iterator库。
这里的子类似乎很奇怪,但实际上存在一个问题。
即使您不想依赖Boost部件,也请检查Boost.Iterator库,尤其是iterator_facade
和iterator_adaptor
位。
有一个完整的示例,说明如何为类编写iterator
和const_iterator
而不会重复太多。 他们的想法是编写一个模板iterator_base
类,然后您可以将其用于以下行中的const和非const类型:
template <class Value> class iterator_base;
typedef iterator_base<T> iterator;
typedef iterator_base<const T> const_iterator;
子类化的问题是你应该提供一个虚拟析构函数,并且你接触切片(从iterator
构建一个const_iterator
时)
所以,与其他人不一样,我觉得它并不“好”。
想想一个需要你修改迭代器成员的案例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.