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:
Get the function name, whether from a string or by inspecting
__traits(allMembers)
.Use
__traits(getOverloads, Aggregate, memberName)
to get a list of symbols.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...