On Sunday, 30 August 2015 at 18:43:32 UTC, Adam D. Ruppe wrote:
On Sunday, 30 August 2015 at 16:31:17 UTC, Daniel N wrote:
I guess it could be possible to solve using UDA:s instead... maybe I'll try that next, just checking if I'm the only one dreaming about "declarations as template parameters".

What I would love would be being able to pass an anonymous struct to a template. Then you can reflect over it to get declarations and group them too.

(Actually, I'd love to be able to use anonymous structs anywhere a typename is expected. Then you could do:

struct { int a; } foo; // declare a variable named foo as type struct { int a; }

but that might break the parser.)

Hmmm yeah, I remember wanting that too... how about this? Passing an anonymous class via a function instead of template.

import std.traits;

enum codeof(S...) = S[0].stringof;

string fun(T)(T sigh)
{
  import std.typetuple;
  import std.algorithm : map;
  import std.string : format;
  import std.range : zip, join;

  alias names = FieldNameTuple!T;
  alias types = staticMap!(codeof, FieldTypeTuple!T);

  return zip([types], [names]).
         map!(a => format("  %s %s;\n", a[0], a[1])).
         join();
}

void main()
{
  struct Yay
  {
    mixin(fun(new class
    {
      int a;
    }));
  }
}

Reply via email to