On Thursday, 11 October 2018 at 06:30:01 UTC, bauss wrote:
Because I'm constructing something from the parameters.

To give the real world example.

I'm converting a function into a soap envelope which means the identifiers must be the same because the parameter names passed in the soap envelope must have the same names.

Filed an enhancement request: https://issues.dlang.org/show_bug.cgi?id=19299

For now, I believe the giant mixin is your only option, if you absolutely need the parameters to have the same names.

If having local variables with the same names is ok, this should do it:

import std.stdio;
import std.traits : ParameterIdentifierTuple, Parameters;

auto fun(alias fn)(Parameters!fn args) {
    mixin(copyParameters!fn);
    writeln(a);
}

auto copyParameters(alias fn)() {
    import std.conv : to;
    string result;
    static foreach (i, e; ParameterIdentifierTuple!fn) {
        result ~= "auto "~e~" = args["~i.to!string~"];\n";
    }
    return result;
}

void gun(int a) {}

unittest {
    fun!(gun)(3);
}


Now, is this the only way to inform the soap factory of your parameter names? Could you instead pass them more explicitly?

--
  Simen

Reply via email to