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;
}));
}
}