Using the functions "map" and "any" on tuples in compile time.

realhet real_het at hotmail.com
Sun Apr 12 11:17:39 UTC 2020


Hello, anyone can help me make this better?

The functionality I want to achieve is: While serializing the 
fields of a struct, I want it to check the @STORED UDA on every 
field. If there is no fields are marked with @STORED, that means 
every field must be serialized. Otherwise only the marked one.

I had problems using map and any, so I come up with this lame 
foreach version: It works, but I think it does it in runtime.

     bool anySTORED = false;
     static foreach(fieldName; FieldNameTuple!T)
       mixin("anySTORED |= hasUDA!(data.*, STORED);".replace("*", 
fieldName));

     static foreach(fieldName; FieldNameTuple!T){{
       mixin("const thisSTORED = hasUDA!(data.*, 
STORED);".replace("*", fieldName));
       if(thisSTORED || !anySTORED) 
mixin("streamAppend_json!(dense, fieldName)(st, data.*, 
nextIndent);".replace("*", fieldName));
     }}

Thanks in advance!

(ps: I just love string mixins, I know :D)


More information about the Digitalmars-d-learn mailing list