...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Author: | David Abrahams |
---|---|
Contact: | dave@boost-consulting.com |
Organization: | Boost Consulting |
Date: | $Date$ |
Copyright: | Copyright David Abrahams 2004. |
abstract: | Header <boost/iterator/iterator_traits.hpp> provides the ability to access an iterator's associated types using MPL-compatible metafunctions. |
---|
std::iterator_traits provides access to five associated types of any iterator: its value_type, reference, pointer, iterator_category, and difference_type. Unfortunately, such a "multi-valued" traits template can be difficult to use in a metaprogramming context. <boost/iterator/iterator_traits.hpp> provides access to these types using a standard metafunctions.
Header <boost/iterator/iterator_traits.hpp>:
template <class Iterator> struct iterator_value { typedef typename std::iterator_traits<Iterator>::value_type type; }; template <class Iterator> struct iterator_reference { typedef typename std::iterator_traits<Iterator>::reference type; }; template <class Iterator> struct iterator_pointer { typedef typename std::iterator_traits<Iterator>::pointer type; }; template <class Iterator> struct iterator_difference { typedef typename detail::iterator_traits<Iterator>::difference_type type; }; template <class Iterator> struct iterator_category { typedef typename detail::iterator_traits<Iterator>::iterator_category type; };