On 03/31/12 21:09, Ali Çehreli wrote:
> How can I determine just the data members of a struct or class, excluding the 
> member functions? isCallable() comes short as member variable that have 
> opCall() defined are also callable:
[...]
> Wait! I found a solution before sending this message. :P isIntegral() works:
> 
>         if (isIntegral!(typeof(mixin("S." ~ member)))) {
> 
> Now the output is:
> 
>     i is a member function
>     m is a member variable     <-- good but dubious
>   foo is a member variable
[...]

Don't forget about templates (appear as members too, but don't have a type).


This will print all fields of struct/class S:

   enum s = cast(S*)null;
   foreach (i, m; s.tupleof) {
      enum name = S.tupleof[i].stringof[4..$];
      alias typeof(m) type;
      writef("(%s) %s\n", type.stringof, name);
   }

Real Programmers don't use std.traits. ;)

artur

Reply via email to