On Saturday, 9 January 2016 at 23:43:32 UTC, Rikki Cattermole wrote:
interface IFoo {
        void a();
        void b();
}

__gshared IFoo a, b;
__gshared IFoo instance;

class Foo(bool bar) : IFoo {
        void a() {
                static if (bar) {
                        // do something
                } else {
                        // do nothing
                }
        }
}

shared static this() {
        a = new Foo!true;
        b = new Foo!false;
}

void update(Lookup lookup) {
        if (lookup["bar"])
                instance = a;
        else
                instance = b;
}

Small indirection when executing to find which function to execute but that is the best out of language semantics we have and only works for booleans.

I see what you are saying... it should work. Seems like a lot of bloat for something relatively trivial. Changing the whole context to change a single branch and multiplying the number of types might have some long term consequences. Its also complexifying the code quite a bit... more prone to errors.

Maybe with a bit of ingenuity these can be overcome.

Reply via email to