On Monday, 3 September 2012 at 21:44:15 UTC, Jonathan M Davis
wrote:
On Monday, September 03, 2012 23:19:07 Carl Sturtivant wrote:
So I'm wondering if a language extension along the following
lines would solve your problem,

Whoa. Stop right there. Language extension? If you think that you need a language extension to solve a problem, odds are that you're going about things the wrong way. Sometimes a language extension would indeed be needed to do something, but odds are, it's not. D is a very powerful language. Think long and hard about how to do something _within_ the language before you even
consider extending it.

If all you're looking to do is make it so that you don't have to care whether you're dealing with an S or S*, then a language extension is complete
overkill. Just make a wrapper struct. Something like (untested):

struct Wrapper(T)
{
    T* ptr;

    ref inout(T) get() inout { return *ptr; }

    alias get this;
}

Just wrap an S* in that, and you can use it exactly as if it were an S.
Problem solved.

- Jonathan M Davis

---same thing (specialized to struct S) in my first reply.
I'm just fishing, seeking a boundary.

There is a cleanness issue to discuss. It would be nice to know
what you think about implicit conversion from 'S*' to 'ref S'
(and not the other way as someone seemed to be suggesting). It's
hard for a newish outsider to get a sense of where the boundaries
lie.


Reply via email to