Boost.MPL.Vector -> Boost.Tuple

typedef boost::mpl::vector< A, B, C > Sequence; typedef typename Question< Sequence >::type Result; BOOST_MPL_ASSERT( boost::mpl::is_same< Result, boost::tuple< A, B, C > >); How write Question? I don't want to write specialisation for every dimension of tuple manually. Implementation should be compatible with the last stable Boost release (1.36) Thank you

AMDG ???? ????? wrote:
typedef boost::mpl::vector< A, B, C > Sequence;
typedef typename Question< Sequence >::type Result;
BOOST_MPL_ASSERT( boost::mpl::is_same< Result, boost::tuple< A, B, C > >); How write Question? I don't want to write specialisation for every dimension of tuple manually. Implementation should be compatible with the last stable Boost release (1.36) Thank you
#include <boost/tuple/tuple.hpp> #include <boost/mpl/vector.hpp> #include <boost/mpl/copy.hpp> #include <boost/type_traits/is_same.hpp> #include <boost/preprocessor/repetition/enum_params.hpp> struct A {}; struct B {}; struct C {}; typedef boost::mpl::vector< A, B, C > Sequence; template<class T, class Tuple> struct tuple_push_front; template<class T, BOOST_PP_ENUM_PARAMS(10, class T)> struct tuple_push_front<T, boost::tuple<BOOST_PP_ENUM_PARAMS(10, T)> > { typedef boost::tuple<T, BOOST_PP_ENUM_PARAMS(9, T)> type; }; template<class Sequence> struct Question { typedef typename boost::mpl::reverse_copy< Sequence, boost::mpl::inserter<boost::tuple<>, tuple_push_front<boost::mpl::_2, boost::mpl::_1> >
::type type; };
typedef Question< Sequence >::type Result; BOOST_MPL_ASSERT((boost::is_same< Result, boost::tuple< A, B, C > >)); In Christ, Steven Watanabe

Thank you, it's very nice solution! Great! 2008/9/5 Steven Watanabe <watanabesj@gmail.com>
AMDG
???? ????? wrote:
typedef boost::mpl::vector< A, B, C > Sequence;
typedef typename Question< Sequence >::type Result;
BOOST_MPL_ASSERT( boost::mpl::is_same< Result, boost::tuple< A, B, C > >); How write Question? I don't want to write specialisation for every dimension of tuple manually. Implementation should be compatible with the last stable Boost release (1.36) Thank you
#include <boost/tuple/tuple.hpp> #include <boost/mpl/vector.hpp> #include <boost/mpl/copy.hpp> #include <boost/type_traits/is_same.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
struct A {}; struct B {}; struct C {};
typedef boost::mpl::vector< A, B, C > Sequence;
template<class T, class Tuple> struct tuple_push_front;
template<class T, BOOST_PP_ENUM_PARAMS(10, class T)> struct tuple_push_front<T, boost::tuple<BOOST_PP_ENUM_PARAMS(10, T)> > { typedef boost::tuple<T, BOOST_PP_ENUM_PARAMS(9, T)> type; };
template<class Sequence> struct Question { typedef typename boost::mpl::reverse_copy< Sequence, boost::mpl::inserter<boost::tuple<>, tuple_push_front<boost::mpl::_2, boost::mpl::_1> >
::type type; };
typedef Question< Sequence >::type Result; BOOST_MPL_ASSERT((boost::is_same< Result, boost::tuple< A, B, C > >));
In Christ, Steven Watanabe
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- С уважением, Царев Олег
participants (2)
-
Steven Watanabe
-
Олег Царев