On 5/3/15 5:29 PM, Meta wrote:
On Sunday, 3 May 2015 at 23:54:49 UTC, Andrei Alexandrescu wrote:
On 5/3/15 4:20 PM, Meta wrote:
On Sunday, 3 May 2015 at 20:25:45 UTC, Andrei Alexandrescu wrote:
OK, here's what I have now - two templates that are self contained and
work well:

The first uses opDispatch to dispatch to a member. The second is a
simple string function that generates the appropriate code. As
discussed the latter composes but the former doesn't.

I can't picture what you're talking about. Could you post an example?

struct A
{
   void fun(int);
}

struct B
{
    A a;
    mixin forwardToMember!(a, "fun");
}

struct C
{
    B b;
    mixin forwardToMember!(b, "fun");
}


Andrei

I still don't get it. Your example works with both dispatchToMember and
forwardToMember. What is the difference between these two exactly?

auto opDispatch(string sym: foo)(ParemeterTypeTuple!(/*etc*/) args)
{
     return parent.foo(args);
}

//Automatically generated
auto foo(ParameterTypeTuple!(/*etc*/) args)
{
     return parent.foo(args);
}

Hmm, I didn't try it assuming it won't work (thought __traits(getMember, member, sym) would fail with opDispatch). Tried it just now, it does work like a charm. Thanks!

Andrei

Reply via email to