| Author: | David Abrahams |
|---|---|
| Contact: | dave@boost-consulting.com |
| Organization: | Boost Consulting |
| 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;
};