Boost logo

Boost :

From: Beman Dawes (bdawes_at_[hidden])
Date: 2002-01-14 14:07:55

At 10:10 AM 1/14/2002, Peter Dimov wrote:

>You can't access SmartPtr::storage_policy in a member declaration since
>SmartPtr is incomplete at this point.
>You can access it in the member function body, though.
>Tying this to my previous question, what is the reason of the
>(over)generalization? When is pointer_type not T*? std::allocator

That question also occurred to me several times.

A simple nested inheritance hierarchy works particularly well if
pointer_type is always T* for the CheckingPolicy:

    template < .... > // Same as Loki::SmartPtr
    class smart_ptr
      : public OwnershipPolicy<
                      CheckingPolicy< T >, ConversionPolicy > >

Notice that because CheckingPolicy was allowed to assume pointer_type is
T*, the inheritance relationships are simpler. StoragePolicy can still
supply the typedefs, and OwnershipPolicy can use them. Neat and tidy.

(I made ConversionPolicy a policy of StoragePolicy; that still seems the
case to me.)


Boost list run by bdawes at, gregod at, cpdaniel at, john at