Hello,
I'm trying to create a fusion::filter_view with a predicate that must access, for each element, the element at the same position in an 'external' typelist.
Let's say I have two sequences like this
typedef mpl::vector<int&> mpl_vec;
typedef fusion::vector<int> f_vec;
Now, I would like a view into f_vec of, for instances, all references in mpl_vec.
typedef fusion::filter_view<f_vec, is_reference<mpl::_> > f_view;
This is obviously wrong; is_reference should evaluate with mpl_vec as its source.
If I wrap is_reference like this
template<class Sequence>
struct is_reference_in
{
template<class T>
struct apply : boost::is_reference<T> // Wrong, T should be extracted from Sequence
{
};
};
and create the view like
typedef fusion::filter_view<f_vec, is_reference_in<mpl_vec> > f_view2;
I gain access to the mpl_vec in my predicate, but since the predicate is immutable I cannot iterate over the Sequence template parameter to extract the type to send to is_reference.
The way i'm solving this now is to store everything in the same vector, like
typedef fusion::vector<fusion::pair<int, int&> > f_vec
and create predicates that work with fusion::pair instead. This seems clumsy.
Could zip_view help me out here?
Any other suggestions?
Thanks,
Christian