5184d64b80
[SVN r35070]
44 lines
2.1 KiB
ReStructuredText
44 lines
2.1 KiB
ReStructuredText
.. Distributed under the Boost
|
|
.. Software License, Version 1.0. (See accompanying
|
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
.. Version 1.2 of this ReStructuredText document corresponds to
|
|
n1530_, the paper accepted by the LWG for TR1.
|
|
|
|
.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
|
|
|
|
The ``iterator_adaptor`` class template adapts some ``Base`` [#base]_
|
|
type to create a new iterator. Instantiations of ``iterator_adaptor``
|
|
are derived from a corresponding instantiation of ``iterator_facade``
|
|
and implement the core behaviors in terms of the ``Base`` type. In
|
|
essence, ``iterator_adaptor`` merely forwards all operations to an
|
|
instance of the ``Base`` type, which it stores as a member.
|
|
|
|
.. [#base] The term "Base" here does not refer to a base class and is
|
|
not meant to imply the use of derivation. We have followed the lead
|
|
of the standard library, which provides a base() function to access
|
|
the underlying iterator object of a ``reverse_iterator`` adaptor.
|
|
|
|
The user of ``iterator_adaptor`` creates a class derived from an
|
|
instantiation of ``iterator_adaptor`` and then selectively
|
|
redefines some of the core member functions described in the
|
|
``iterator_facade`` core requirements table. The ``Base`` type need
|
|
not meet the full requirements for an iterator; it need only
|
|
support the operations used by the core interface functions of
|
|
``iterator_adaptor`` that have not been redefined in the user's
|
|
derived class.
|
|
|
|
Several of the template parameters of ``iterator_adaptor`` default
|
|
to ``use_default``. This allows the
|
|
user to make use of a default parameter even when she wants to
|
|
specify a parameter later in the parameter list. Also, the
|
|
defaults for the corresponding associated types are somewhat
|
|
complicated, so metaprogramming is required to compute them, and
|
|
``use_default`` can help to simplify the implementation. Finally,
|
|
the identity of the ``use_default`` type is not left unspecified
|
|
because specification helps to highlight that the ``Reference``
|
|
template parameter may not always be identical to the iterator's
|
|
``reference`` type, and will keep users from making mistakes based on
|
|
that assumption.
|
|
|