setting fields of object using traits

Jacob Carlborg via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Sep 20 23:21:35 PDT 2016


On 2016-09-20 21:45, Ram_B wrote:
> I'm trying to set fields of object from JSON with traits library. How i
> can to it properly?
>
> import std.stdio;
> import std.json;
> import std.traits;
> import std.meta:  Alias;
>
> class Obj{
>     void fromJSON(this T)(JSONValue j){
>         foreach(field; FieldNameTuple!T){
>             alias member = Alias!(__traits(getMember, T, field));
>             static if (__traits(hasMember, member, "fromJSON")){
>                 member.fromJSON(j[field]);
>             } else {
>                 member = j[field];

I'm pretty sure this won't work. You need to use "this.tupleof[index] = 
value" to set a value. You can iterate all fields using "T.tupleof" and 
then get the name of a field using "__traits(identifier, 
T.tupleof[index]);". Or you can use a string mixin.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list