让常规迭代器(或类似的范围或视图类)从相应的const_iterator派生是一种良好的实践吗?
这方面的动机是
例如,考虑三维网格的视图,即网格的一部分。它可能包含一个指针,3个大小和2-3步幅,总共384字节.
const和变体版本将有许多共同的功能(任何你可以做的只读3D网格)。
上面示例的anti-motivation是,const视图包含一个const指针,因此发生变化的视图必须执行一个const_cast才能使用它,或者在一个非const指针中添加一个包含相同地址的额外字段。
发布于 2015-03-02 21:27:07
如果const_iterator和迭代器之间存在继承,则可能会发生相反的情况。也就是说,const迭代器提供了导航的基本能力,可变迭代器增加了修改目标的能力(通过允许对const_iterator内部的受保护访问来实现)。
编辑:最初提出的关于从迭代器派生const_iterator的问题。正如我和大卫·罗德里格斯几乎同时指出的那样,这是一个糟糕的想法。
使用从const_iterator派生迭代器的修订问题,David的注释提供了最好的响应。这是可以做到的,但这通常不是一个好主意。
作为一个反问题:您认为在这种情况下使用继承有什么好处?如果有优势,那么有一个同时派生迭代器和const_iterator的公共基类(公共基类,iterator_impl)是否具有相同的优势?
https://stackoverflow.com/questions/28819644
复制相似问题