|
Boost Users : |
Subject: [Boost-users] [fusion] creating fusion-vectors of references
From: Oswin Krause (Oswin.Krause_at_[hidden])
Date: 2012-08-03 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 i-th 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 value-initialization 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
Boost-users 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