On Wednesday, 10 October 2018 at 22:56:14 UTC, James Japherson wrote:
One of the problems is connecting it with actual code that does something depending on the path in a way that is general enough to be used for a wide variety of problems.

Any ideas on how this could be done?

My first idea is to have Dispatch take an alias parameter, and see if it's useful for anything:

struct Dispatch(alias Fn, Base...) {
    static auto opDispatch(string name, T...)(T vals) {
        return Dispatch!(Fn, Base, name).init;
    }
    alias _get = Fn!Base;
    alias _get this;
}

// join a list of stuff with _ between each element.
template join(T...) {
    import std.conv : to;
    static if (T.length == 0) {
        enum join = "";
    } else static if (T.length == 1) {
        enum join = T[0].to!string;
    } else {
        enum join = T[0].to!string ~"_"~join!(T[1..$]);
    }
}

unittest {
    assert(Dispatch!join.A.B.C == "A_B_C");
}

No idea what to use it for, but it's kinda nice, I guess. Very generic, too.

--
  Simen

Reply via email to