November 22, 2012
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
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
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
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
> Have you tried is(ident == enum) ?

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

Bye,
bearophile
November 23, 2012
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
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