"Paul Mensonides" <[EMAIL PROTECTED]> writes:

> ----- Original Message -----
> From: "David Abrahams" <[EMAIL PROTECTED]>
>
>
>> "Jaap Suter" <[EMAIL PROTECTED]> writes:
>>
>> >> Nifty!  You're using one of my favorite metaprogramming tricks, the
>> >> default template parameter which allows you to avoid creating a
>> >> separate implementation template.  I almost forgot about that one,
>> >> it's been so long since I've been able to use it.
>> >
>> > Funny you mention that. I've been meaning to ask for its appropriateness
> on
>> > this list. After all, we are exposing implementation details in the
>> > interface which is not something I would recommend on a daily basis.
> Glad
>> > you like it :).
>>
>> That's a good point.  It's a question of overall clarity.  If it's
>> clearer to dispatch to an implementation template, I would say "do
>> it".
>
> I do this type of thing all the time:
>
> namespace hidden_default_template_parameter {
>
> class hidden {
>     enum type { };
>     friend class access_rights;
> };
>
> struct obtuse_access_rights {
>     typedef hidden::type type;
> };
>
> } // hidden_default_template_parameter
>
> #define HIDE \
>     HIDE_ID( \
>         hidden_default_template_parameter::obtuse_access_rights::type; \
>     ) \
>     /**/
>
> #define HIDE_ID(id) id = id(),
>
> template<class T, HIDE class U = T> struct sample {
>     // ...
> };
>
> In other words, a user cannot specify the 'U' parameter without also
> specifying the parameter generated by 'HIDE'.  This method is not
> bulletproof, because the user can still do this:
>
> sample<int, hidden_default_template_parameter::obtuse_access_rights::type(),
> double>
>
> ...but that is pretty obtuse.

Yeah.  I have no problem with access protection where it prevents
unintentional misuse and improves overall code clarity.  However, this
seems like it doesn't fit that bill.

-- 
                       David Abrahams
   [EMAIL PROTECTED] * http://www.boost-consulting.com
Boost support, enhancements, training, and commercial distribution

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to