Peter Alexander wrote:
- opDispatch
This is useful and of significant value if used the right way.

Can you give me an example of it being used the right way?

It can be very useful for jQuery/JSON style dynamic objects:

    import std.variant, std.stdio;

    struct Dynamic {
        Variant[string] vars;

        void opDispatch(string key)() @property {
            return vars[key];
        }

        void opDispatch(string key, T)(T value) @property {
            vars[key] = value;
        }
    }

    void main() {
        auto foo = Dynamic();

        foo.a = "A";
        foo.b = 11;

        writefln("%s, %s", foo.a, foo.b);
    }


  I hope you are not actually serious about that '->' part.

I'm serious. I don't like overloaded syntax. foo.bar shouldn't also mean (*foo).bar -- it causes confusion and introduces ambiguities when either could work. Combine this with opDispatch, UFCS and function overloading and your in for some nasty headaches.

Craziness. What could you possibly gain is there in forcing a pointer distinction at every point that it's used? We already declared the variable as a pointer, we don't need to be reminded of that fact at every line.

Reply via email to