I'm not sure what the solution is for your specific question, but
there is some alternative way you could do: (no longer need
function on your struct)
I tried to comment the lines, even thought i'm not sure i
remember everything correctly, but it compiles :p
More info: https://dlang.org/spec/traits.html
```D
import std.stdio;
class Serializer
{
void process(string k, ref int v)
{
writeln("serializing int ", k, ": ", v);
}
void process(string k, ref long v)
{
writeln("serializing long ", k, ": ", v);
}
void process(U)(ref U v) if (is(U == struct))
{
// get all members from U
static foreach (member; __traits(allMembers, U))
{
// get attributes from U.member
static foreach (attr; __traits(getAttributes,
__traits(getMember, U, member)))
{
// is the attribute OldName
static if (is(typeof(attr) == OldName))
{
// the name you put in OldName attribute
string oldName = attr.name;
auto value = __traits(getMember, v, member);
writeln("field: ", member);
writeln("oldname: ", oldName);
writeln("value: ", value);
}
}
}
}
}
struct OldName
{
string name;
}
struct Serializable
{
@OldName("ifield")
int intField;
}
void main()
{
import std.stdio;
import std.traits;
import core.internal.traits;
Serializable v;
auto sz = new Serializer();
sz.process(v);
}
```