Referencing an overloaded function
Mantis
mail.mantis.88 at gmail.com
Sat Mar 24 07:39:39 PDT 2012
24.03.2012 14:13, John написал:
> Is there any way to refer to a specific function overload?
>
> For example:
>
> import std.stdio;
> import std.traits;
>
> void foo() {}
> void foo(int x) {}
>
> void main() {
> writeln(foo.mangleof);
> writeln(ParameterTypeTuple!(foo).stringof);
> }
>
> Both of these statements always refer to the first matching function.
> If I change the order of declarations for foo, the results change.
>
> Is there a way to reference the second overload in this example?
>
> I can use a function pointer with ParameterTypeTuple to get the
> correct result, but something like mangleof won't work, since that
> will return the mangle of the local function pointer instead of the
> original function.
>
import std.stdio;
import std.traits;
void foo() { writeln( "void" ); }
void foo( int x ) { writeln( x ); }
template getOverload( alias func, A... ) {
void function(A) getOverload = &func;
}
void main() {
writeln( getOverload!(foo, int).mangleof );
writeln( ParameterTypeTuple!(getOverload!(foo, int)).stringof );
getOverload!(foo, int)(42);
getOverload!(foo)();
}
Will not hold for return types other than void, there may be some
generic workaround (of course, you can pass return type as tempate
parameter).
More information about the Digitalmars-d-learn
mailing list