我有一类拥有std::vector
,应提供begin()
,end()
,cbegin()
和cend()
方法。由于我不想公开实现细节,即我使用的是std::vector
,所以我必须拥有自己的迭代器。据我所知,这是什么boost::iterator_adapter
是什么:它需要一些迭代器,并在一个新的迭代器类型 - >我的std::vector<T>::iterator
成为然后MyClass::iterator
包装它。当使用boost :: iterator_adapter实现自定义迭代器时,可以使用相同的类作为mutable和const迭代器吗?
首先,我对boost :: iterator_adapter的理解是正确的,第二,我可以避免编写第二个const_iterator,而不是typedef it(using const_iterator = const iterator
)?
class MyClass {
public:
iterator begin();
// ...
private:
using container_t = std::vector;
container_t<int> container;
}
class MyClass::iterator
: public boost::iterator_adaptor<
MyClass::iterator // Derived
, container_t<int>::iterator // Base
, boost::use_default // Value
, boost::random_access_traversal_tag > // CategoryOrTraversal
{
public:
iterator()
: iterator::iterator_adaptor_() {}
explicit iterator(const iterator::iterator_adaptor_::base_type& p)
: iterator::iterator_adaptor_(p) {}
private:
friend class boost::iterator_core_access;
};
这可能不会编译。
如果你只是转发“begin(),end(),cbegin()和cend()”,你通过包装迭代器隐藏了什么?我不明白。 如果性能在这里不重要,他们最简单和最灵活的方式可能只是一个any_iterator – lars