On 11/02/2013 03:41 PM, TheFlyingFiddle wrote:

> The problem i am faced with is that i need a way to figure out the
> return value of opDispatch by the invokation call.

If I now understand you correctly, what initially confused my was "invocation call." Because "invocation" makes me think about the actual arguments of the functino call.

> all the information i need is here
>
> int a = foo.baz("hello");
>
> This gives returntype int.

So, what you are trying to do is to get the return type from the left-hand side of the assignment operator.

> So is there a way to gain this information in opDspatch?

I don't think so. You can always return a special (similar to Variant that you mentioned) and play with automatic type conversions no that type.

> Is it possible to do something like this?
>
> auto a = foo.baz!(int)("hello");

Hmmm. I don't think so. "baz" itself becomes the first argument of opDispatch. So I tried the following ugly thing but it does not work either:

import std.stdio;

struct S
{
    R opDispatch(string name, R, T...)(T parameters)
    {
        return R.init;
    }
}

void main()
{
    auto s = S();

    auto r0 = s.foo!("foo", int)("hello");    // does not compile
    auto r1 = s.bar!("bar", double)(100);

    static assert (is (typeof(r0) == int));
    static assert (is (typeof(r1) == double));
}

Ali

Reply via email to