On Friday, 25 January 2013 at 06:21:59 UTC, Jonathan M Davis wrote:
If you make opDispatch @property, then you can't use it with normal functions, and if you don't make it @property, then it can't be used with property functions. And you can't overload on @property, so opDispatch is pretty much screwed with regards to properties at this point. It's certainly fixable, but
there will need to be a (small) change in the language to do so.


OK, so opDispatch must definitively be transformed ! I have to say I didn't saw that coming.

It isn't that big of a deal if we consider we rewrite that way :

a.b => a.opDispatch!"b"
a.b!T => a.opDispatch!("b", T)

No need for opDispatch to actually be a function.

According to what is passed as string, opDispatch can resolve itself as a function or a delegate. See example :

class Madness {
    private void function(Madness)[string] fun;

    @property
    auto opDispatch(string name)() {
        immutable f = fun[name];
        return {
            return f(this);
        };
    }
}

A proper inlining mechanism should handle that.

Reply via email to