Book Image

D Cookbook

By : Adam Ruppe
Book Image

D Cookbook

By: Adam Ruppe

Overview of this book

Table of Contents (21 chapters)
D Cookbook
Credits
Foreword
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

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:

  1. Get a reference to the aggregate. For a struct, class, or enum 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, use mixin("yourmodule.name").

  2. Get a list of the names of all members with __traits(allMembers).

  3. Retrieve the member with __traits(getMember). Use a helper template in the form of alias helper(alias T) = T; and an alias member in the loop to make referring to the member easier.

  4. Using static if and the is expression, filter out any types: static if(is(member)) { /* type */ }.

  5. Then, check for functions with the is expression on typeof(member): else static if(is(typeof(member...