Michel Fortin napisał:

> > Is there anything implementation specific in the outer struct that provides
> > ref semantics to Impl? If not, Container could be generic, parametrized by
> > Impl type.  
> 
> You could provide an implementation-specific version of some functions 
> as an optimization. For instance there is no need to create the Impl 
> when asking for the length, if the pointer is null, length is zero. 
> Typically, const function can be implemented in the outward container 
> with a shortcut checking for null.

I think the reference struct can still be orthogonal to the container.

        struct Ref(Impl)
        {
                private Impl* _impl;
                ref Impl impl() @property
                {
                        if (!impl) impl = new Impl;
                        return *impl;
                }

                static if (hasLength!Impl)
                {
                        auto length() @property
                        {
                                return impl ? impl.length : 0;
                        }
                }

                alias impl this;
        }

Reusability lightens the burden of the container's author (less fuss for user 
implementations) and somewhat standardizes containers as they all must exhibit 
a certain API with certain semantics to be able to fit into Ref.

The downside is that the syntax for the most common case (ref semantics) is a 
little nosier than for value-like behavior.

-- 
Tomek

Reply via email to