On Friday, 25 July 2014 at 15:25:43 UTC, BlackEdder wrote:
Is it possible to automatically convert an associative array to
a
struct?
Basically I want to do the following (for any struct).
struct A {
double x = 1;
}
double[string] aa = ["x":1];
auto a = toStruct!A( aa );
I've been trying to do this at compile time, but can't work out
how setMembers and or loop over the associative array at compile
time.
Is this possible at all?
one possible way:
enum aa = ["x": 1];
import std.traits;
struct AAtoStruct(alias aa)
if(isAssociativeArray!(typeof(aa)) &&
isSomeString!(KeyType!(typeof(aa))))
{
alias T = ValueType!(typeof(aa));
import std.range, std.algorithm, std.array;
mixin(zip(aa.keys, aa.values)
.map!`"T " ~ a[0] ~ " = " ~ a[1].to!string ~ ";\n"`
.joiner.array);
}
alias S = AAtoStruct!aa;