View mode: basic / threaded / horizontal-split · Log in · Help
November 22, 2012
enum detection
How to detect enum member?

struct A {
  enum id = 10;
  int b;
  char c;
}
foreach(ident; __traits(allMembers, A)) {
  // is ident enum or not?
}
November 22, 2012
Re: enum detection
On 11/22/12, Jack Applegame <japplegame@gmail.com> wrote:
> How to detect enum member?
>
> struct A {
>    enum id = 10;
>    int b;
>    char c;
> }
> foreach(ident; __traits(allMembers, A)) {
>    // is ident enum or not?
> }

That's not an enum, that's a manifest constant. This is an enum:
struct A {
enum id { x = 10 }
}

You can use:

struct A
{
   enum id = 10;
   int b;
   char c;
}

template isEnum(alias symb)
{
   static if (is(symb == enum))
       enum bool isEnum = true;
   else
       enum bool isEnum = false;
}

void main()
{
   foreach(ident; __traits(allMembers, A))
   {
       static if (isEnum!(__traits(getMember, A, ident)))
       {
           pragma(msg, ident, " yes");
       }
   }
}
November 22, 2012
Re: enum detection
Jack Applegame:

> How to detect enum member?
>
> struct A {
>   enum id = 10;
>   int b;
>   char c;
> }
> foreach(ident; __traits(allMembers, A)) {
>   // is ident enum or not?
> }

Have you tried is(ident == enum) ?

Bye,
bearophile
November 22, 2012
Re: enum detection
On Thursday, 22 November 2012 at 15:10:08 UTC, Jack Applegame 
wrote:
> How to detect enum member?
>
> struct A {
>   enum id = 10;
>   int b;
>   char c;
> }
> foreach(ident; __traits(allMembers, A)) {
>   // is ident enum or not?
> }

Actual field might have `offsetof` builtin property.

(not tested)
  static if (is(typeof(mixin("A."~ident~".offsetof")))) {}

Kenji Hara
November 22, 2012
Re: enum detection
> Have you tried is(ident == enum) ?

Sorry, ignore this answer, I was too much distracted.

Bye,
bearophile
November 23, 2012
Re: enum detection
On Thursday, 22 November 2012 at 17:36:03 UTC, Kenji Hara wrote:
> Actual field might have `offsetof` builtin property.
>
> (not tested)
>   static if (is(typeof(mixin("A."~ident~".offsetof")))) {}

Yes, it works! Thanks.
November 23, 2012
Re: enum detection
On Thursday, 22 November 2012 at 17:36:03 UTC, Kenji Hara wrote:
> Actual field might have `offsetof` builtin property.
>
> (not tested)
>   static if (is(typeof(mixin("A."~ident~".offsetof")))) {}

Yes, it works! Thanks.
Top | Discussion index | About this forum | D home