Boost logo

Boost :

From: David B. Held (dheld_at_[hidden])
Date: 2004-07-08 17:22:41


Jonathan Turkanis wrote:
> "David B. Held" <dheld_at_[hidden]> wrote in message
> news:cckeh3$fd0$1_at_sea.gmane.org...
>
> [...]
> I 'm not sure I see the syntax problem; if you mean that it's
> more cumbersome to use a metafunction, I agree.

The user would have to write:

     sp<p1, p2>::nested<t>::type p;

instead of:

     sp<p1, p2>::nested<t> p;

> [...]
> Then specializing less< ... > for sp_nested wouldn't affect the
> implementation of less<nested>.

Ah, back to square one.

> [...]
> I don't see the distinction between
>
> template <class P1, class P2, typename T>
> struct less<sp<P1, P2>::nested<T> >
> : binary_function<...>
> {
> bool operator()(...);
> };
>
> and
>
> template <class P1, class P2, typename T>
> struct less<sp_nested<P1, P2, T> >
> : binary_function<...>
> {
> bool operator()(...);
> };
>
> with respect to exposing implementation details.

The difference is that the component is called sp<>::nested<>.
It's not called sp_nested<>, because they might want to typedef
sp<> and instantiate the nested class over various types. By
also exposing sp_nested<>, I'm asking them to call it by two
different names depending on usage. It isn't totally evil, but
it's less pleasant:

     typedef sp<p1, p2> my_sp;
     my_sp::nested<foo> p;
     my_sp::nested<bar> q;

     less<my_sp::nested<foo> > comp;

vs.:

     less<sp_nested<p1, p2, foo> > comp;

Somewhat defeats the point of the nice typedef.

Dave


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