Boost logo

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