Iterate over enum

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Apr 19 23:41:16 PDT 2015


On Saturday, 18 April 2015 at 21:11:28 UTC, HaraldZealot wrote:
> On Saturday, 18 April 2015 at 20:42:09 UTC, Ali Çehreli wrote:
>> On 04/18/2015 01:30 PM, HaraldZealot wrote:
>>> Is it possible iterate over enum (preferable in compile time) 
>>> or at
>>> least check that particular value belong to enum?
>>
>> EnumMembers:
>>
>>  http://dlang.org/phobos/std_traits.html#EnumMembers
>>
>> It returns a "static tuple", meaning that a foreach over those 
>> members will be a compile-time foreach. (No loop at all at 
>> run-time, the body is unrolled for every member.)
>>
>> Ali
>
> Many thanks

If you want a dynamic version use

     [EnumMembers!T]

or without enumerator aliases (enumerator value duplicate)

     import std.traits: EnumMembers;
     import std.algorithm: sort, uniq;
     return [EnumMembers!T].sort().uniq;

I've turned this into enumMembers at

https://github.com/nordlow/justd/blob/master/traits_ex.d#L396

This prevents the foreach loop from being inlined. I've had 
problems with compilation performance with nested 
foreach-iterating over EnumMembers!T with 100s of elements.


More information about the Digitalmars-d-learn mailing list