|
Boost : |
From: Maxim Yanchenko (maximyanchenko_at_[hidden])
Date: 2008-04-09 04:24:03
Emre Turkay <emreturkay <at> gmail.com> writes:
> Is there a way to traverse a boost::tuple at compile or runtime with sth
> similar to foreach?
Hi Emre,
If you can't use boost::fusion, you can declare something like this (didn't try
myself):
template<class Tuple, class Func>
struct tuple_binder
{
Tuple& t_;
Func f_;
tuple_binder(Tuple& t, const Func& f)
: t_(t), f_(f) {}
template< typename Number > void operator()(Number)
{
f_( t_.template get<Number::value>() );
}
};
template<class Tuple, class Func>
inline
tuple_binder<Tuple, Func>
bind_tuple(Tuple& t, const Func& f)
{
return tuple_binder<Tuple, Func>(t,f);
}
and then use boost::mpl::for_each in the following manner:
MyTuple tuple;
typedef boost::mpl::range_c< int,
0,
boost::tuples::length<MyTuple>::value
> Indices;
boost::mpl::for_each< Indices >( bind_tuple( tuple, functor ) );
The idea is to iterate by tuple element indices (so you can iterate in any
direction etc, just provide a desired index sequence it boost::mpl::for_each).
Bests,
Maxim
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk