On Friday, 1 September 2017 at 22:21:18 UTC, Biotronic wrote:
On Friday, 1 September 2017 at 20:58:20 UTC, EntangledQuanta wrote:

template(A, B...)
{
   auto foo(C...)(C c)
   {
       ... get c's parameter names, should be alpha, beta
   }
}


foo!(., .)(alpha, beta)

I need the actual identifiers passed to foo. I can get the types(obviously C) but when I try to get the identifier names(__traits(identifier or other methods) I stuff get _param_k or errors.

I need both C's types and the parameter identifier names past, else I'd just pass as strings.

Like Jonathan M Davis points out, this is impossible for regular parameters. For template alias parameters, on the other hand, this works:

void bar(alias fn)() {
    assert(fn.stringof == "alpha");
}

unittest {
    int alpha;
    bar!(alpha);
}

--
  Biotronic

The problem I have with this is that when I try to pass variables in the template complains that there is no "this"

So, what I have resorted to doing is passing the type and the name, which seems redundant:

bar!(int, "alpha")

rather than

bar!(alpha) or bar(alpha)

alpha is a variable in a object in my case.

I've tried basically something like the following

void bar(alias fn)()
{
   typeof(fn) should return int and
   fn.stringof should return "alpha"
}

although my code is more complex since I have multiple template parameters(using a variadic).

Reply via email to