Best practice for avoiding code duplication while implementing iterator and const_iterator classes [closed]
Asked Answered
H

1

7

What are the best practices to avoid code duplication when implementing class pairs such as iterator and const_iterator or similar?

  • Does one usually implement iterator in terms of const_iterator using lots of const_casts?
  • Does one employ some sort of traits class and end up defining both iterator and const_iterator as different instantiations of a common template?

This seems like a common enough problem to have a canonical solution but I have failed to find any articles dedicated to that.

Hyssop answered 8/11, 2016 at 13:39 Comment(3)
Sorry, too broad. Many different approaches. Inheritance. Templates. There is no universally agreed-upon "best practice". Each individual case varies.Westwardly
I prefer a template class parametrized by value_type, pointer_type, reference_type. For example: template <typename PType> class CustomIterator {}; typedef CustomIterator<MyClass*> iterator_type; typedef CustomIterator<const MyClass*> const_iterator_type;Ben
#2150692Photoengrave
C
2

I don't have any experience with implementing iterators, although I think this is similar to other projects. Refactor common code, etc.

Looking at GNU libstdc++'s implementation of std::vector::iterator

#include <bits/stl_iterator_base_funcs.h>
// ...
template ... class vector : ... {
    typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
    typedef __gnu_cxx::__normal_iterator<const_pointer, vector> const_iterator;
};
Customable answered 8/11, 2016 at 13:45 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.