Referencing an overloaded function

Philippe Sigaud philippe.sigaud at gmail.com
Sat Mar 24 06:59:20 PDT 2012


On Sat, Mar 24, 2012 at 13:13, John <nospam at unavailable.com> wrote:
> Is there any way to refer to a specific function overload?

You can use __traits(getOverloads, aggregate, "member") to get all
overloads of member aggregate.member. Where an aggregate is a class, a
struct or a module.

module pack.mod; // needs to be XXX.YYY for __traits to work

void foo() {}
void foo(int x) {}

template Alias(A...) { alias A Alias;}

void main()
{
    // The Alias!( ) trick is needed to work around a limitation in
alias X Y grammar
    // __traits() is not accepted in an alias: alias
__traits(getOverloads, X, "Y") OV_XY; does not work
    alias Alias!(__traits(getOverloads, pack.mod, "foo")) OV;

    // OV is a tuple holding all the different foo's

    foreach(i, ov; OV)
        writefln("overload #%s: %s", i, typeof(ov).stringof);

    alias OV[1] intFoo; // void foo(int x) {}

    intFoo(1); // calls void foo(int x) {}
}


More information about the Digitalmars-d-learn mailing list