Boost logo

Boost :

From: Aleksey Gurtovoy (agurtovoy_at_[hidden])
Date: 2002-11-30 03:00:00


David B. Held wrote:
> > > > template <class Policy>
> > > > struct get_category
> > > > : mpl::if_<
> > > > mpl::is_placeholder<Policy>
> > > > , mpl::identity<Policy>
> > > > , get_category_impl<Policy>
> > > > >::type
> > > > {
> > > > BOOST_MPL_AUX_LAMBDA_SUPPORT(1,get_category,(Policy))
> > > > };
> > [...]
>
> When is it better to derive from something vs. composing it
> in a typedef?

It's mostly the matter of style. Typedef is inherently more verbose:

     template <class Policy>
     struct get_category
     {
         typedef typename mpl::if_<
               mpl::is_placeholder<Policy>
             , mpl::identity<Policy>
             , get_category_impl<Policy>
>::type::type type;
             
        BOOST_MPL_AUX_LAMBDA_SUPPORT(1,get_category,(Policy))
     };

There are also cases when inheritance is preferable because it brings along
other base class' members, besides the canonical 'type' typedef:

    // enables both 'is_same<...>::value' and 'is_same<...>::type'
    // notations
    template< typename T1, typename T2 >
    struct is_same
        : bool_c<false>
    {
    };

> Also, we're really close on the smart pointer code. I've
> checked in the latest version to the sandbox, applying your changes.
> However, I still get 14 errors that are all in mpl/identity.hpp.

No wonder - you are including MPL headers inside the opened 'boost'
namespace (line 194) ;).

[...]

> BOOST_MPL_AUX_VOID_SPEC(1, identity)
> BOOST_MPL_AUX_VOID_SPEC(1, make_identity)
>
> Now, I notice that I'm supposed to define these for the policies under
> bcc.

That's an oversight. I am planning to fix it shortly so
BOOST_MPL_AUX_LAMBDA_SUPPORT will be self-sufficient.

HTH,
Aleksey


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