繁体   English   中英

可以'iterator'类型只是子类'const_iterator'吗?

[英]Can 'iterator' type just subclass 'const_iterator'?

关于迭代器的另一个问题之后,我对自定义容器有一些疑问。 在我的容器中, iteratorconst_iterator的子类,因此我可以从非const转换为const“免费”。 但这是允许的,还是有这样的设置有任何缺点或非工作方案?

是的,这很好。 例如,这就是VC10为vector迭代器实现的结构。 请参阅<vector> _Vector_iterator_Vector_const_iterator

顺便说一句,编写迭代器很难。 值得花时间学习和使用boost :: iterator库。

这里的子类似乎很奇怪,但实际上存在一个问题。

即使您不想依赖Boost部件,也请检查Boost.Iterator库,尤其是iterator_facadeiterator_adaptor位。

有一个完整的示例,说明如何为类编写iteratorconst_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM