Getting a list of all methods or fields in a module or an object
To dig into an aggregate, the first step is to get a list of members. Then, we'll be able to look at each individual member and dig as deeply as we need to.
How to do it…
Let's execute the following steps to get a list of all methods or fields in a module or object:
Get a reference to the aggregate. For a
struct
,class
, orenum
type, you may use its name directly (or if it is passed to a template, the corresponding template parameter). To get a reference to a module, usemixin("yourmodule.name")
.Get a list of the names of all members with
__traits(allMembers)
.Retrieve the member with
__traits(getMember)
. Use a helper template in the form ofalias helper(alias T) = T;
and analias
member in the loop to make referring to the member easier.Using static
if
and theis
expression, filter out any types:static if(is(member)) { /* type */ }
.Then, check for functions with the
is
expression ontypeof(member)
:else static if(is(typeof(member...