On 08/23/2012 11:47 PM, Jacob Carlborg wrote:
How about this:
import std.stdio;
class Foo
{
auto forward (alias fn, Args...) (Args args)
{
return fn(args);
}
void bar (int a = 3)
{
writeln("bar ", a);
}
}
auto call (alias fn, T, Args...) (T t, Args args)
{
t.forward!(fn)(args);
}
void main ()
{
auto foo = new Foo;
call!(Foo.bar)(foo);
call!(Foo.bar)(foo, 4);
}
Prints:
bar 3
bar 4
Could this work for you?
Nope :)
class Zoo: Foo
{
override void bar(int a = 3) {
writeln("Zoobar: ", a);
}
}
auto zoo = new Zoo;
call!(Foo.bar)(zoo,4); // prints Zoobar: 4
And anyways, my two solutions composed together quite nicely.