Boost logo

Boost :

From: Daniel Wallin (dalwan01_at_[hidden])
Date: 2003-02-02 17:17:07


At 16:48 2003-02-01 -0500, you wrote:
> > What do you mean by "a single framework could be used to handle both
> approaches"?
>
>I mean a library which would allow you to extract optional types
>parameters based on either their wrapper templates ("Color_is<...>")
>or on a predicate (e.g. pick the one for which is_class<T>::value is
>true).

Perhaps this can be done with the interface for
parameter extraction i posted earlier.. Something like:

template <typename T> struct Model_is;
template <typename T> struct Color_is;
template <typename T> struct Seats_is;
template <typename T> struct Transmission_is;

template <class Model = unspecified,
           class Color = unspecified,
           class Seats = unspecified,
           class Transmission = unspecified>
class car {

   typedef extract_policies<
       mpl::vector4<Model, Color, Seats, Transmission>
     , mpl::vector4<
           named_parameter<Model_is>
         , named_parameter<Color_is>
         , named_parameter<Seats_is>
         , named_parameter<Transmission_is>
>
     , mpl::vector4<
         Model_is<gl>, Color_is<red>, Seats_is<leather>,
Transmission_is<automatic>
>
> policies_t;

   typedef typename policies_t::policy0 model;
   typedef typename policies_t::policy1 color;
   typedef typename policies_t::policy2 seats;
   typedef typename policies_t::policy3 transmission;

};

Where named_parameter<...> is sugar for is_same_tt<Model_is<void>, _1>
(from Jonathan's code). Obviously 'extract_policy' would be the wrong
name for this.. 'extract_parameters' would be more appropriate.

Daniel Wallin, dalwan01_at_[hidden]


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk