
Boost : 
From: Alexander Nasonov (alnsnmycop_at_[hidden])
Date: 20030429 02:56:10
Joaquín Mª López Muñoz wrote:
> Seems like a common enough problem, but I haven't been able to
> find any facility to construct a MPL Sequence conformant type from
> a boost::tuple. Has anybody run into the same problem? If so, pointers
> to info / snippets of code are most welcome.
Recently I implemented function_arguments<Signature> as MPL random access
sequence. I also implemented sig2tuple<Signature>. So, I'm able to create
an MPL sequence from function signature, then modify it (add, remove or
transform arguments) and then convert it into tuple. You can take a look at
code here:
1. Definition of function_arguments
http://cvs.sourceforge.net/cgibin/viewcvs.cgi/cppexperiment/dynamic_any/boost/dynamic_any/aux/function_arguments.hpp?rev=1.2&contenttype=text/vnd.viewcvsmarkup
http://cvs.sourceforge.net/cgibin/viewcvs.cgi/cppexperiment/dynamic_any/boost/dynamic_any/aux/generated/function_arguments_impl10.hpp?rev=1.1&contenttype=text/vnd.viewcvsmarkup
2. Definition of sig2tuple and use of function_arguments
http://cvs.sourceforge.net/cgibin/viewcvs.cgi/cppexperiment/dynamic_any/boost/dynamic_any/function.hpp?rev=1.31&contenttype=text/vnd.viewcvsmarkup
I recommend using function_arguments sequence only for types which are
function agruments. I can suggest that you need more then that. This is the
other way of doing it:
template<class Tuple>
struct tuple2vector;
// Less specialized first
template<class T1, class T2, class T3, ..., class T10>
struct tuple2vector< tuple<T1,T2,T3,...,T10> >
{
typedef mpl::vector<T1,T2,T3,...,T10> type;
};
// ...
template<class T1, class T2>
struct tuple2vector< tuple<T1,T2> >
{
typedef mpl::vector<T1,T2> type;
};
template<class T1>
struct tuple2vector< tuple<T1> >
{
typedef mpl::vector<T1> type;
};
template<>
struct tuple2vector< tuple<> >
{
typedef mpl::vector<> type;
};
Alternatively, you can implement MPL conformant sequence
tuple_sequence<Tuple>. It's not so hard as you can imagine.
(Question to MPL's authors: when it will be documented?).
 Alexander Nasonov Remove minus and all between minus and at from my email for timely response
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk