Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
November 23, 2017 Can I count the of enum's fields at compile time? | ||||
---|---|---|---|---|
| ||||
for example: enum A { a = -10, b = -11, c = -12, d = -13, e = -34} enum int countOfA = coutOfFields(A); // 5 fields |
November 23, 2017 Re: Can I count the of enum's fields at compile time? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc | On Thursday, 23 November 2017 at 00:58:21 UTC, Marc wrote: > for example: > > enum A { a = -10, b = -11, c = -12, d = -13, e = -34} > > enum int countOfA = coutOfFields(A); // 5 fields https://dlang.org/spec/traits.html#allMembers enum A { a = -10, b = -11, c = -12, d = -13, e = -34} enum int countOfA = __traits(allMembers, A).length; // 5 fields static assert(countOfA == 5); Mike |
November 23, 2017 Re: Can I count the of enum's fields at compile time? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Michael V. Franklin | On Thursday, 23 November 2017 at 01:01:42 UTC, Michael V. Franklin wrote:
> On Thursday, 23 November 2017 at 00:58:21 UTC, Marc wrote:
>> for example:
>>
>> enum A { a = -10, b = -11, c = -12, d = -13, e = -34}
>>
>> enum int countOfA = coutOfFields(A); // 5 fields
>
> https://dlang.org/spec/traits.html#allMembers
>
> enum A { a = -10, b = -11, c = -12, d = -13, e = -34}
>
> enum int countOfA = __traits(allMembers, A).length; // 5 fields
>
> static assert(countOfA == 5);
>
> Mike
This was fast! Thanks
|
November 22, 2017 Re: Can I count the of enum's fields at compile time? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc | 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
|
November 23, 2017 Re: Can I count the of enum's fields at compile time? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | 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.
|
November 22, 2017 Re: Can I count the of enum's fields at compile time? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc | 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
|
November 23, 2017 Re: Can I count the of enum's fields at compile time? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Thursday, 23 November 2017 at 01:34:54 UTC, Ali Çehreli wrote:
> 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:
>>>> [...]
>>>
>>> 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
whoa, this is so easy and elegant. I'm falling in love with D. Thank you too!
|
Copyright © 1999-2021 by the D Language Foundation