...one of the most highly
regarded and expertly designed C++ library projects in the
world.

— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards

template< typename Sequence , typename State , typename ForwardOp > struct fold { typedefunspecifiedtype; };

Returns the result of the successive application of binary `ForwardOp`

to the result of the previous `ForwardOp`

invocation (`State`

if it's the first call) and every element of the sequence in the range `[begin<Sequence>::type,end<Sequence>::type)`

in the linear order.

#include "boost/mpl/fold.hpp"

Parameter | Requirement | Description |
---|---|---|

`Sequence` | A model of Sequence | A sequence to iterate. |

`State` | A type | The initial state for the first `ForwardOp` application. |

`ForwardOp` | A model of [Lambda Function] | The operation to be executed on forward traversal. |

Expression | Expression type | Precondition | Semantics | Postcondition |
---|---|---|---|---|

`typedef fold<Sequence,T,Op>::type t;` | A type | Equivalent to `typedef lambda<Op>::type op; typedef iter_fold< Sequence,T,apply<op,_1,deref<_2> > >::type t;` . |

Linear. Exactly `size<Sequence>::type::value`

applications of `ForwardOp`

.

typedef vector<long,float,short,double,float,long,long double> types; typedef typename fold< types , integral_c<long, 0> , if_< is_float<_2>,next<_1>,_1 > >::type number_of_floats;BOOST_STATIC_ASSERT(number_of_floats::value == 4);

Algorithms, `fold_backward`

, `iter_fold`

, `iter_fold_backward`

, `copy`

, `copy_if`

Table of Contents

Last edited December 12, 2002 4:42 pm