www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Is there a way to get the list of names of a class' member variables?

reply Jonathan M Davis <jmdavisprog gmail.com> writes:
MemberFunctionsTuple() from std.traits will return the list of names of member 
function, and FieldTypeTuple from std.traits will return the list of the
_types_ 
of the member variables. But I don't see a function that returns the list of
the 
_names_ of the member variables. Am I just blind, or does such a function not 
currently exist?

- Jonathan M Davis
Jul 04 2010
parent reply "Simen kjaeraas" <simen.kjaras gmail.com> writes:
Jonathan M Davis <jmdavisprog gmail.com> wrote:

 MemberFunctionsTuple() from std.traits will return the list of names of  
 member
 function, and FieldTypeTuple from std.traits will return the list of the  
 _types_
 of the member variables. But I don't see a function that returns the  
 list of the
 _names_ of the member variables. Am I just blind, or does such a  
 function not
 currently exist?
__traits[1] is your friend in these matters. __traits( allMembers, Foo ) returns a tuple of string literals, each of which corresponds to a member of Foo. [1] http://www.digitalmars.com/d/2.0/traits.html -- Simen
Jul 04 2010
parent reply "Simen kjaeraas" <simen.kjaras gmail.com> writes:
Simen kjaeraas <simen.kjaras gmail.com> wrote:

 Jonathan M Davis <jmdavisprog gmail.com> wrote:

 MemberFunctionsTuple() from std.traits will return the list of names of  
 member
 function, and FieldTypeTuple from std.traits will return the list of  
 the _types_
 of the member variables. But I don't see a function that returns the  
 list of the
 _names_ of the member variables. Am I just blind, or does such a  
 function not
 currently exist?
__traits[1] is your friend in these matters. __traits( allMembers, Foo ) returns a tuple of string literals, each of which corresponds to a member of Foo.
If you prefer the temmplated way, here's a FieldNameTuple template: template FieldNameTuple( T ) { enum FieldNameTuple = __traits( allMembers, T ); } -- Simen
Jul 04 2010
parent Philippe Sigaud <philippe.sigaud gmail.com> writes:
On Sun, Jul 4, 2010 at 12:55, Simen kjaeraas <simen.kjaras gmail.com> wrote:

 __traits[1] is your friend in these matters.
 __traits( allMembers, Foo ) returns a tuple of string literals, each of
 which corresponds to a member of Foo.
Somehting I discovered today: it works for module names, also: auto ioMembers = __traits(allMembers, std.stdio); It also contains the unittests... Hmm, I wonder what one can do with that. Philippe
Jul 04 2010