www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - enum detection

reply "Jack Applegame" <japplegame gmail.com> writes:
How to detect enum member?

struct A {
   enum id = 10;
   int b;
   char c;
}
foreach(ident; __traits(allMembers, A)) {
   // is ident enum or not?
}
Nov 22 2012
next sibling parent Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
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"); } } }
Nov 22 2012
prev sibling next sibling parent "bearophile" <bearophileHUGS lycos.com> writes:
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
Nov 22 2012
prev sibling next sibling parent "Kenji Hara" <k.hara.pg gmail.com> writes:
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
Nov 22 2012
prev sibling next sibling parent "bearophile" <bearophileHUGS lycos.com> writes:
 Have you tried is(ident == enum) ?

Sorry, ignore this answer, I was too much distracted. Bye, bearophile
Nov 22 2012
prev sibling next sibling parent "Jack Applegame" <japplegame gmail.com> writes:
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.
Nov 22 2012
prev sibling parent "Jack Applegame" <japplegame gmail.com> writes:
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.
Nov 22 2012