[Issue 15335] getSymbolsByUDA fails if type has private members
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Nov 23 05:56:48 PST 2015
https://issues.dlang.org/show_bug.cgi?id=15335
--- Comment #5 from ryan at rcorre.net ---
Here's another idea, this time with more mixins! Don't have time to test
thoroughly right now but I _think_ its working with private members and giving
back symbols rather than names:
template getMembersByUDA(T, alias attribute) {
import std.string : format;
import std.meta : Filter;
template toSymbols(names...) {
static if (names.length == 1)
mixin("alias toSymbols = AliasSeq!(T.%s);".format(names[0]));
else
mixin("alias toSymbols = AliasSeq!(toSymbols!(names[1..$]),
%s);".format(names[0]));
}
enum hasSpecificUDA(string name) = mixin("hasUDA!(T."~name~", attribute)");
alias membersWithAttribute = Filter!(hasSpecificUDA, __traits(allMembers,
T));
alias getMembersByUDA = toSymbols!(membersWithAttribute);
}
mixins are like violence ... if they don't work you're not using enough of
them.
I'll test more later and put up a separate PR if it looks more promising.
--
More information about the Digitalmars-d-bugs
mailing list