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

Inspecting function overloads


When we handle functions by name, an important detail is left out; overloaded functions with the same name, but different arguments. How can we drill down into these overloads?

How to do it…

Let's execute the following steps to inspect function overloads:

  1. Get the function name, whether from a string or by inspecting __traits(allMembers).

  2. Use __traits(getOverloads, Aggregate, memberName) to get a list of symbols.

  3. Inspect the symbols with a loop and is(typeof(overload)).

The code is as follows:

struct S {
  void foo() {}
  void foo(int a) {}
}
void main() {
  import std.stdio;
  foreach(overload; __traits(getOverloads, S, "foo"))
    writeln(typeof(overload).stringof);
}

The following is the result of the preceding code:

void()
void(int a)

Tip

It doesn't hurt to call __traits(getOverloads) on a name that isn't a function. It will simply return an empty set.

How it works…

The __traits(getOverloads) function works similar to __traits(getMember), which we used in the previous...