How to iterate getSymbolsByUDA

bauss jj_1337 at live.dk
Sun Nov 25 01:01:30 UTC 2018


On Saturday, 24 November 2018 at 08:50:59 UTC, Eko Wahyudin wrote:
> On Saturday, 24 November 2018 at 08:09:38 UTC, Stanislav Blinov 
> wrote:
>> On Saturday, 24 November 2018 at 03:48:12 UTC, Eko Wahyudin 
>> wrote:
>>> Hi all,
>>> anyone know how to iterate getSymbolsByUDA ?
>>
>> enum Attr;
>> struct A
>> {
>>     @Attr int a;
>>     int b;
>>
>>     @Attr void foo() {}
>>     @Attr void foo(int) {}
>> }
>>
>> void main() {
>>     import std.traits;
>>     import std.stdio;
>>
>>     alias symbols = getSymbolsByUDA!(A, Attr);
>>
>>     A a;
>>
>>     static foreach (i; 0 .. symbols.length) {
>>         writeln("identifier: ", __traits(identifier, 
>> symbols[i]));
>>         static if (is(typeof(symbols[i]) == int)) {
>>             __traits(getMember, a, __traits(identifier, 
>> symbols[i])) = 42;
>>         }
>>     }
>>
>>     assert(a.a == 42);
>> }
>
> aah ya,, this statement is work
>
> static foreach (i; 0 .. symbols.length)
>
> thank you.

It should work with just:

static foreach(sym; getSymbolsByUDA!(A, Attr)){
   ...
}

or

alias symbols = getSymbolsByUDA!(A, Attr);

static foreach(sym; symbols){
   ...
}


---

What you were missing was just making it a static foreach.


More information about the Digitalmars-d-learn mailing list