|
Boost : |
From: Jonathan Turkanis (technews_at_[hidden])
Date: 2004-07-08 17:40:22
"David B. Held" <dheld_at_[hidden]> wrote in message
news:cckhc5$m3l$1_at_sea.gmane.org...
> 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;
Got it. One last try -- a variation on Brian's:
struct nested_base { };
template <class P1, class P2>
struct sp
{
template <typename T>
struct nested : nested_base {
typedef P1 p1;
typedef P1 p2;
typedef T t;
};
};
template <typename T, typename Enabler = void>
struct less { };
template<typename T>
struct enable_if_nested
: boost::enable_if<
boost::is_base_and_derived<nested_base, T>
>
{ };
template <typename T>
struct less< T, typename enable_if_nested<T>::type >
{ ... };
Jonathan
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk