Thread overview | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
June 13, 2013 List all enum in a class | ||||
---|---|---|---|---|
| ||||
Hi, I tried that but in doesn't print anything: foreach (member; __traits(allMembers, type)) { static if (is(typeof(__traits(getMember, type, member)) == enum)) { writeln(member); } } I tried a lot of other ways but nothing compile. thx |
June 13, 2013 Re: List all enum in a class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bruno Deligny | Try this: class type { enum b = "hey"; enum test { lol, rofl } test mem; } template workaround(T) { alias workaround = T; } import std.stdio; void main() { foreach (member; __traits(allMembers, type)) { static if (is(workaround!(__traits(getMember, type, member)) == enum)) { writeln("enum type ", member); } else { static if(is(typeof(__traits(getMember, type, member)) == enum)) writeln("enum member ", member); } } } It will NOT list b - it considers it to just be a string. But it will list test as a type, and mem as an enum typed member. The reason this will work and yours didn't is typeof(some_type) doesn't work because some_type is already a type. An enum is a type. The workaround thing is needed because is(__traits...) doesn't compile. It complains that it expected a type, not traits. The simple template works around this. But with the member, it is a value, so you do want to do typeof() on that one. So to catch it all, we do both. However as far as I know right now, there's no way to get "b" as an enum here because the typeof will always just return string. |
June 13, 2013 Re: List all enum in a class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | Adam D. Ruppe:
> However as far as I know right now, there's no way to get "b" as an enum here because the typeof will always just return string.
Is it worth asking a D enhancement?
Bye,
bearophile
|
June 13, 2013 Re: List all enum in a class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | i tried your test and it doesn't print test. |
June 13, 2013 Re: List all enum in a class | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Thursday, June 13, 2013 14:46:48 bearophile wrote:
> Adam D. Ruppe:
> > However as far as I know right now, there's no way to get "b" as an enum here because the typeof will always just return string.
>
> Is it worth asking a D enhancement?
It's a manifest constant, so it's not really an enum. As such, I'm inclined to say no.
- Jonathan M Davis
|
June 13, 2013 Re: List all enum in a class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bruno Deligny | On Thursday, 13 June 2013 at 17:05:43 UTC, Bruno Deligny wrote:
> i tried your test and it doesn't print test.
Maybe we have different versions of the compiler (I think this behavior recently changed).
Try running dmd without arguments and see what the first line says. Mine is:
DMD32 D Compiler v2.063
|
June 13, 2013 Re: List all enum in a class | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Thursday, 13 June 2013 at 12:46:49 UTC, bearophile wrote:
> Is it worth asking a D enhancement?
I don't think so because it isn't something you'd even really need to know, it is just like writing a literal.
Actually that gives me an idea: if you have a variable that is not a function and obviously not a literal since they wouldn't appear on allMembers, checking if you can take the address of it might be a usable check. A regular immutable member and an enum differ in that the member has an address. The enum doesn't.
So perhaps there is a way to figure it out, but I still don't think it is worth an enhancement for anyway.
|
June 14, 2013 Re: List all enum in a class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | On Thursday, 13 June 2013 at 17:13:26 UTC, Adam D. Ruppe wrote:
> On Thursday, 13 June 2013 at 17:05:43 UTC, Bruno Deligny wrote:
>> i tried your test and it doesn't print test.
>
> Maybe we have different versions of the compiler (I think this behavior recently changed).
>
> Try running dmd without arguments and see what the first line says. Mine is:
>
> DMD32 D Compiler v2.063
2.062
I will try with the 2.063
|
June 14, 2013 Re: List all enum in a class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bruno Deligny | On Friday, 14 June 2013 at 11:44:45 UTC, Bruno Deligny wrote:
> On Thursday, 13 June 2013 at 17:13:26 UTC, Adam D. Ruppe wrote:
>> On Thursday, 13 June 2013 at 17:05:43 UTC, Bruno Deligny wrote:
>>> i tried your test and it doesn't print test.
>>
>> Maybe we have different versions of the compiler (I think this behavior recently changed).
>>
>> Try running dmd without arguments and see what the first line says. Mine is:
>>
>> DMD32 D Compiler v2.063
>
> 2.062
>
> I will try with the 2.063
I doesn't work with 2.063
|
June 17, 2013 Re: List all enum in a class | ||||
---|---|---|---|---|
| ||||
Posted in reply to Bruno Deligny | On Friday, 14 June 2013 at 12:06:11 UTC, Bruno Deligny wrote:
> I doesn't work with 2.063
Hmm, I don't know what's going on. Can someone else try to make it work?
|
Copyright © 1999-2021 by the D Language Foundation