On Thursday, 11 March 2021 at 12:56:34 UTC, Виталий Фадеев wrote:

This will generate lambda:
__processMouseKey = (ref MouseKeyEvent event) { process(event); };

two calls:
  call labnda;
    call process;

What right way to call function directly with selecting one of two ?

Something like this:

    template Overloads(alias symbol)
    {
        static if (__traits(compiles, __traits(parent, symbol)))
            alias Overloads = __traits(getOverloads,
                __traits(parent, symbol),
                __traits(identifier, symbol)
            );
        else
            alias Overloads = symbol;
    }

    auto getOverloadFor(alias fun, T)()
    {
        foreach (overload; Overloads!fun)
static if (__traits(compiles, (T arg) { overload(arg); }))
                return &overload;
    }

Usage:

    __processMouseKey = getOverloadFor!(process, MouseKeyEvent);

Reply via email to