Boost logo

Boost :

From: Daryle Walker (darylew_at_[hidden])
Date: 2002-02-03 10:51:18


on 2/2/02 11:32 PM, Gustavo Guerra at gustavobt_at_[hidden] wrote:

> ----- Original Message -----
> From: "Daryle Walker" <darylew_at_[hidden]>
>
>
>> on 2/1/02 6:27 PM, Gustavo Guerra at gustavobt_at_[hidden] wrote:
>>
>> [SNIP]
>>> I took a look at the proposal, and there's no macros on the interface. He
>>> just used macros on the implementation to avoid repetition, where he could
>>> have used the Currioulsy Recuring Template pattern. Isn't the interface the
>>> important thing here?
>>
>> How would you have used the Curiously Recurring Template pattern here?
>>
>
> Well, maybe I rushed into conclusions too fast. Sorry. I just assumed that the
> CRT was what you tried to use but your compiler didn't let you, as I took a
> _very_quick_ look at your code and was the only thing I could remeber that
> needed a littel more template support from the compiler to avoid that kind of
> repetition you avoided with those macros (remembering
> http://www.cuj.com/experts/1906/langer.htm?topic=experts). But looking
> closely, maybe it doesn't apply in this case. If it wasn't the CRT, what else
> did you experiment to replace the macros then?

I tried something like

template < class ObjectType, typename AspectType, AspectType (ObjectType::*
Getter)(), AspectType (ObjectType::* GetSetter)(AspectType) >
class get_set_base
{
public:
    explicit get_set_base( ObjectType &o )
              : s_( &o ), a_( o.*Getter() )
              {}
             get_set_base( ObjectType &o, AspectType a )
              : s_( &o ), a_( o.*GetSetter(a) )
              {}
            ~get_set_base()
              { s_->*GetSetter(a_); }

private:
    ObjectType * const s_;
    AspectType const a_;
};

But my compiler choked on the third template parameter, saying it was an
unimplemented feature.

-- 
Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT mac DOT com

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