使常规迭代器(或类似范围或视图类)派生自相应的const_iterator是一种好习惯吗?
动机就是
例如,考虑一个3D网格的视图,即网格的一部分。它可以包含1个指针,3个大小和2-3个步幅,总共384个字节。
const和mutating版本将具有 lot 的常用功能(您可以使用只读3D网格执行任何操作)。
以上示例的反动机是const视图包含一个const指针,因此变异视图必须执行const_cast
才能使用它,或添加一个在非const指针中包含相同地址的额外字段。
答案 0 :(得分:2)
如果const_iterator和迭代器之间存在继承,那么它应该采用另一种方式。这是一个const迭代器提供导航的基本能力,而可变迭代器增加了修改目标的能力(通过允许对const_iterator内部的受保护访问来实现)。
编辑:原始问题是关于从迭代器派生const_iterator的问题。这是一个坏主意,因为我和@David Rodriguez几乎完全同时指出了这一点。
通过修订后的问题,从const_iterator派生迭代器,David的评论提供了最佳响应。它可以做到,但通常不是一个好主意。
作为一个反问题:你在这种情况下使用继承有什么好处?如果有一个优点,是否有一个公共基类(iterator_impl),迭代器和const_iterator都可以从中获得相同的优势?