How do you use boost iterators
- by Neil G
It worked, and then I added the typedefs so that I could have a const_sparse_iterator as well. Now, when I compile this and try to use sparse_iterator, it says:
/Users/neilrg/nn/src/./core/sparse_vector.h:331: error: invalid use of incomplete type 'struct sparse_vector<A>::sparse_iterator'
Here's the code. More code here.
tempalte<typename T>
class sparse_vector {
// There is more code at my previous question, but this might be enough...?
private:
template<typename base_type>
class sparse_iterator_private
: public boost::iterator_adaptor<
sparse_iterator_private<base_type> // Derived
, base_type // Base
, value_type // Value
, boost::random_access_traversal_tag // CategoryOrTraversal
> {
private:
struct enabler {}; // a private type avoids misuse
public:
sparse_iterator_private()
: sparse_iterator_private<base_type>::iterator_adaptor_(0) {}
explicit sparse_iterator_private(typename array_type::iterator&& p)
: sparse_iterator_private<base_type>::iterator_adaptor_(p) {}
private:
friend class boost::iterator_core_access;
reference dereference() const { return this->base()->value; }
};
public:
typedef sparse_iterator_private<typename array_type::iterator> sparse_iterator;
typedef sparse_iterator_private<typename array_type::const_iterator> const_sparse_iterator;
};