我有一个包含和管理一系列对象的类。为了避免在允许遍历它们的同时泄露这些对象的存储方式,我决定使用类型擦除boost::any_iterator
。
using my_erased_type_iterator = boost::range_detail::any_iterator<
MyClass,
boost::bidirectional_traversal_tag,
MyClass&,
std::ptrdiff_t>;
我定义了一个函数Begin()
and End()
in MyClass
,它简单地将容器的begin()
andend()
函数返回为my_erased_type_iterator
. 它完全按照我的意愿工作,除了我在's 的接口MyClass
中公开的功能外,没有人知道我正在使用向量来存储对象,也没有人可以访问容器。Myclass
现在,由于多种原因,我需要对对象进行反向迭代。我还需要知道反向迭代器之后的下一个元素(类似于调用std::next()
普通迭代器,这对于反向迭代器来说已经不是那么简单了),并且我可能还需要调用erase()
该反向迭代器上的函数。
所以对于我的问题:是否有一种优雅的方式来使用类型擦除和反向迭代器(以及正向和反向的 const 版本)?我应该使用前向类型擦除迭代器并向后迭代吗?我突然想到我可能以错误的方式解决这个问题,所以我愿意接受任何建议或在需要时澄清我的问题。