On Tuesday, 3 February 2015 at 10:32:47 UTC, Pena wrote:
How can I use this code or something similar to dynamically
construct a tuple containing types of fields marked as @Cloneable?

import std.traits, std.typetuple;

template CloneableTypes(S) {
  template IsCloneable(string M) {
enum IsCloneable = staticIndexOf!(Cloneable, __traits(getAttributes, __traits(getMember, S, M))) >= 0;
  }

  template FieldType(string M) {
    alias FieldType = typeof(__traits(getMember, S, M));
  }

alias CloneableTypes = staticMap!(FieldType, Filter!(IsCloneable, __traits(allMembers, S)));
}

Then CloneableTypes!Foo is a TypeTuple (int, string).

Reply via email to