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).