Filling a Tuple-like struct in variadic member
RivenTheMage
riven-mage at id.ru
Tue Nov 8 03:21:41 PST 2011
Is it possible to do such thing without using string mixin?
------------
import std.stdio;
import std.metastrings;
struct Key(T...)
{
static string declareFields() // compile-time
{
string declaration;
foreach (index, type; T)
declaration = declaration ~ Format!("%s field_%s;\n", type.stringof, index);
return declaration;
}
mixin(declareFields());
uint numFields;
static string declareFieldsAssignment() // compile-time
{
string declaration;
immutable(string) exceptionMessage = "Argument type mismatch.";
foreach (index, type; T)
{
declaration = declaration ~
Format!("if (_arguments[%s] != typeid(%s))\n", index, type.stringof) ~
" throw new Exception(\"" ~ exceptionMessage ~
"\");\n" ~
"else\n" ~
"{\n" ~
Format!(" field_%s = *(cast(%s*) _argptr);\n", index, type.stringof) ~
Format!(" _argptr += field_%s.sizeof;\n", index) ~
"}\n\n";
}
return declaration;
}
void assignFields(...)
{
mixin(declareFieldsAssignment());
numFields = _arguments.length;
}
}
void main()
{
Key!(string) testval;
testval.assignFields("test string");
writeln(testval);
}
More information about the Digitalmars-d-learn
mailing list