gpt4 book ai didi

c++ - 常规迭代器(或类似的范围/ View 类)是否应该从 const_iterator 派生?

转载 作者:行者123 更新时间:2023-11-30 03:55:54 26 4
gpt4 key购买 nike

从相应的 const_iterator 派生常规迭代器(或类似的范围或 View 类)是否是一种好的做法?

这样做的动机

  • 共享代码,以及
  • 避免转换,当迭代器/ View 很大时。

例如,考虑 3D 网格的 View ,网格的一部分。它可能包含 1 个指针、3 个大小和 2-3 个步长,总共 384 个字节。

const 和 mutating 版本将具有很多通用功能(您可以使用只读 3D 网格执行的任何操作)。

上述示例的反动机是常量 View 包含一个常量指针,因此变异 View 必须执行const_cast 才能使用它,或者在非常量指针中添加一个包含相同地址的额外字段。

最佳答案

如果 const_iterator 和 iterator 之间存在继承关系,那么它应该是相反的。这是一个 const 迭代器提供了基本的导航能力,可变迭代器增加了修改目标的能力(通过允许对 const_iterator 内部的 protected 访问来实现)。

编辑:最初的问题询问关于从迭代器派生 const_iterator。这是一个坏主意,因为我和@David Rodriguez 几乎同时指出。

修改后的问题,deriving iterator from const_iterator,David 的评论提供了最好的回应。可以做到,但这通常不是一个好主意。

作为反问:您认为在这种情况下使用继承有什么优势?如果有优势,那么拥有从中派生 iterator 和 const_iterator 的公共(public)基类 (iterator_impl) 是否提供相同的优势?

关于c++ - 常规迭代器(或类似的范围/ View 类)是否应该从 const_iterator 派生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28819644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com