On Saturday, 2 February 2013 at 22:18:52 UTC, Jonathan M Davis wrote:
[..] All these other suggestions are
just complicating things to no real benefit.

You say "there's no real benefit". I say "there's the benefit of being able to add another layer of encapsulation when it's needed". Here's what I mean by that:

The lack of encapsulation with @property attribute:

struct T
{
    private int _value;

    void add_twice(int v)
    {
        _value += 2 * v;
    }
}

struct S
{
    private T _t;
    private int _sum_of_squares; // Can't update this

    @property ref T prop()
    {
        return _t;
    }
}

void main()
{
    S s;
    s.prop.add_twice(); // *Not* incrementing s._sum_of_squares
}

...Whereas with memberspaces we can add that extra layer of encapsulation:

struct S
{
    private T _t;
    private int _sum_of_squares;

    memberspace prop
    {
        ref const(T) opCall() const
        {
            return _t;
        }

        void add_twice(int v)
        {
            _sum_of_squares += (2 * v)^2; // Yippee!
            return _t.add_twice(v);
        }
    }
}

Reply via email to