Can I count the of enum's fields at compile time?

Ali Çehreli acehreli at yahoo.com
Thu Nov 23 01:34:54 UTC 2017


On 11/22/2017 05:21 PM, Marc wrote:
> On Thursday, 23 November 2017 at 01:04:29 UTC, Jonathan M Davis wrote:
>> On Thursday, November 23, 2017 00:58:21 Marc via Digitalmars-d-learn 
>> wrote:
>>> for example:
>>>
>>> enum A { a = -10, b = -11, c = -12, d = -13, e = -34}
>>>
>>> enum int countOfA = coutOfFields(A); // 5 fields
>>
>> import std.traits;
>>
>> enum countOfA = EnumMembers!A.length;
>>
>> - Jonathna M Davis
> 
> This sounds more readable. I was going to write a "function extension" 
> to enum but I think it isn't really needed. Thank you too.

As an eponymous template:

enum One { a }
enum Three { a, b, c }

import std.range : EnumMembers;
enum countOf(E) = EnumMembers!E.length;

unittest {
     static assert(countOf!One == 1);
     static assert(countOf!Three == 3);
}

void main() {
}

Ali


More information about the Digitalmars-d-learn mailing list