| Home | Libraries | People | FAQ | More

### Iterator Facade

##### Description

The `iterator_facade` template provides an intrusive mechanism for producing a conforming Fusion iterator.

##### Synopsis

    template<typename Derived, typename TravesalTag>
    struct iterator_facade;

##### Usage

The user of iterator_facade derives his iterator type from a specialization of iterator_facade and passes the derived iterator type as the first template parameter. The second template parameter should be the traversal category of the iterator being implemented.

The user must the implement the key expressions required by their iterator type.

Table 1.93. Parameters

Name | Description
--- | ---
`iterator`, `It`, `It1`, `It2` | A type derived from `iterator_facade`
`N` | An MPL Integral Constant

Table 1.94. Key Expressions

Expression | Result | Default
--- | --- | ---
`iterator::template value_of<It>::type` | The element stored at iterator position `It` | None
`iterator::template deref<It>::type` | The type returned when dereferencing an iterator of type `It` | None
`iterator::template deref<It>::call(it)` | Dereferences iterator `it` | None
`iterator::template next<It>::type` | The type of the next element from `It` | None
`iterator::template next<It>::call(it)` | The next iterator after `it` | None
`iterator::template prior<It>::type` | The type of the next element from `It` | None
`iterator::template prior<It>::call(it)` | The next iterator after `it` | None
`iterator::template advance<It, N>::type` | The type of an iterator advanced `N` elements from `It` | Implemented in terms of `next` and `prior`
`iterator::template advance<It, N>::call(it)` | An iterator advanced `N` elements from `it` | Implemented in terms of `next` and `prior`
`iterator::template distance<It1, It2>::type` | The distance between iterators of type `It1` and `It2` as an MPL Integral Constant | None
`iterator::template distance<It1, It2>::call(it1, it2)` | The distance between iterator `it1` and `it2` | None
`iterator::template equal_to<It1, It2>::type` | The distance between iterators of type `It1` and `It2` | `boost::same_type<It1, It2>::type`
`iterator::template equal_to<It1, It2>::call(it1, it2)` | The distance between iterators `it1` and `it2` | `boost::same_type<It1, It2>::type()`

##### Header

    #include <boost/fusion/iterator/iterator_facade.hpp>
    #include <boost/fusion/include/iterator_facade.hpp>

##### Example

A full working example using `iterator_facade` is provided in triple.cpp in the extension examples.