我有一个拥有 a并且std::vector
应该提供begin()
、end()
和方法的类。由于我不想公开实现细节,即我使用 a ,所以我必须有自己的迭代器。据我了解,这是为了:它需要一些迭代器并将其包装在一个新的迭代器类型中 -> my变成 then 。cbegin()
cend()
std::vector
boost::iterator_adapter
std::vector<T>::iterator
MyClass::iterator
首先,我对 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;
};
这可能无法编译。