【发布时间】:2014-06-06 00:33:01
【问题描述】:
我正在编写一个基本上为其他数据提供灵活接口的类。我想使用符合 STL 的迭代器来迭代元素,并且使用 boost::iterator_facade 走在正确的轨道上,但我有一个关于一致性的问题,我似乎无法找到官方答案。
我必须为 STL 一致性提供一个 const 迭代器吗?
我将std::shared_ptr<T>& 用于迭代器提供的非常量取消引用类型。如果我确实提供了 const 迭代器,是否可以为我的取消引用类型提供 std::shared_ptr<T>& 而不是 std::shared_ptr<const T>&?
我觉得这两个问题的答案是否定的,但我无法找到证实/证实这些怀疑的官方来源。我认为第二个问题更多的是语义问题。
【问题讨论】:
-
您确定不想从迭代器返回引用吗?因为那时你最多有一个输入迭代器......
-
@Deduplicator 我认为返回对
shared_ptr的引用让我觉得很不寻常,但我明白你的意思。我将不得不重新考虑这个界面。 -
您的“其他数据”是否可写?如果没有,则仅提供 const 迭代器。
-
@Deduplicator 它是可写的。关于这个“其他数据”的特别之处是我在迭代时生成元素视图
T。这就是我为生成的元素提供 shared_ptr 的原因。不过,为了与问题的范围保持一致,我将编辑问题并假设引用类型。 -
这些 shared_ptr 是每个返回的东西唯一的,还是同一个容器中的所有共享点都相同?如果是后者,就把
shared_ptr全部去掉。
标签: c++ c++11 boost stl iterator