On 10/3/20 10:16 AM, realhet wrote:

I tried it to put into a function:

auto getSymbolNamesByUDA(T, string uda)(){
     string[] res;
     static foreach(a; getSymbolsByUDA!(T, uda)) res ~= a.stringof;
     return res;
}

D __traits give you strings, the std.traits thing is giving you symbols. Don't use it, just use the compiler traits:

// note, not tested
auto getSymbolNamesByUDA(T, string uda)(){
     string[] res;
     static foreach(n; __traits(allMembers, T)) {
        // static, but don't use static foreach so you can break
        foreach(u; __traits(getAttributes, __traits(getMember, T, n))
           static if(is(typeof(u) == string) && u == uda) {
               res ~= n;
               break;
           }
     }
     return res;
}

-Steve

Reply via email to