...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The iterator_facade template provides an intrusive mechanism for producing a conforming Fusion iterator.
template<typename Derived, typename TravesalTag> struct iterator_facade;
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 |
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() |
#include <boost/fusion/iterator/iterator_facade.hpp> #include <boost/fusion/include/iterator_facade.hpp>
A full working example using iterator_facade is provided in triple.cpp in the extension examples.