
Boost Users : 
Subject: [Boostusers] [fusion] creating fusionvectors of references
From: Oswin Krause (Oswin.Krause_at_[hidden])
Date: 20120803 10:10:51
Hi list,
I am new to fusion, so my problem might be really easy to solve.
I have a fusion vector which looks a bit like
typedef fusion::vector<std::vector<A>,std::vector<B>,std::vector<C> >
Tuple;
All vectors have the same size and I want from each of these
std::vectors one specific element (like the 10th from every vector) and
create a fusion::vector<A&,B&,C&> from these elements(my real problem is
a bit more complicated, for example one of the vectors might be
std::vector<bool>, so the type might be different from an actual
reference)
My first try was transform:
//the Functor which extracts the ith element
class Get
{
private:
std::size_t m_index;
public:
Get(std::size_t index):m_index(index){}
template<typename Sig>
struct result;
template<typename U>
struct result<Get(U&)>{
typedef typename U::reference type;
};
template <typename U>
typename result<Get(U)&>::type operator()(U& vec) const{
return vec[m_index];
}
};
Tuple myTuple(...);
fusion::vector<A&,B&,C&> ref =
boost::fusion::transform(myTuple,Get(0));
But this doesn't work, because
1. transform only takes myTuple as constant argument.
2. it performs a valueinitialization of the references in the
constructor, not in the initialization list.
Any solution to my problem? It should work for fusion::vector, but a
solution which works for all fusion sequences is awarded with bonus
points :). If there is no solution for fusion::vector, I would
appreciate a solution for another container as well (but no bonus in
this case!)
Greetings,
Oswin
Boostusers list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net