$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: David Abrahams (dave_at_[hidden])
Date: 2006-08-14 13:50:41
<imre_at_[hidden]> writes:
> Hi,
>
> Is it possible to do this trick during compilation time?
> I was able to go from type lists to boost::cons but I can't find a way to
> make that last step.
Not sure what you mean by "that last step..."
  namespace mpl = boost::mpl;
  using namespace mpl::placeholders;
  typedef mpl::vector<int, long, char const*> types;
  typedef mpl::fold<types, boost::cons<_2,_1> >::type tuple_type;
  tuple_type some_tuple;
If you want it to be a specialization of the boost::tuple template
(misguided, IMO) you can do it, but not "algorithmically."  You need a
bunch of partial specializations:
      template <class V, std::size_t n = mpl::size<V>::type::value >
      struct types_to_tuple;
      
      template <class V>
      struct types_to_tuple<V, 0>
      {
          typedef boost::tuple<> type;
      }
      template <class V>
      struct types_to_tuple<V, 1>
      {
          typedef boost::tuple<typename mpl::at_n<0>::type> type;
      }
      template <class V>
      struct types_to_tuple<V, 2>
      {
          typedef boost::tuple<typename mpl::at_n<0>::type, typename mpl::at_n<1>::type> type;
      }
      etc.
This works on mpl::vector.  Getting it to work on mpl::list is
slightly more complicated.
-- Dave Abrahams Boost Consulting www.boost-consulting.com