A template for method forwarding?
Simen Kjaeraas
simen.kjaras at gmail.com
Fri Dec 12 13:00:42 PST 2008
On Fri, 12 Dec 2008 21:08:51 +0100, Bill Baxter <wbaxter at gmail.com> wrote:
> Let's say you want to use object composition instead of inheritance.
> Now you want to forward half-a-dozen method from the new to class to
> the composed class, like so:
>
> class NewClass
> {
> ImplT implementor;
> ...
> // Do some method forwarding
> void func1(int a, float b) { implementor.func1(a,b); }
> string func2(string s) { return implementor.func2(s); }
> T aTemplate(T)(T val, T[] arr) { return implementor!(T)(val,arr); }
> ...
> }
>
> It becomes pretty tedious to type all these things out, and if the
> base class changes a method signature, you have to remember to do it
> in the parent class too.
> So the challenge is to write some kind of template that does the
> necessary argument deduction to implement a forwarder just by
> mentioning the name of the method and the object to forward to.
> Something like this perhaps for the usage syntax:
>
> mixin call_forward!(implementor, "func1");
> mixin call_forward!(implementor, "func2");
> mixin call_forward!(implementor, "aTemplate");
>
> Is it possible? Somebody must have done something like this already.
>
> --bb
Wouldn't opDot do what you want here?
--
Simen
More information about the Digitalmars-d
mailing list