August 23, 2006

I have the following code:

class MyClass {
public:
    void memberFunction ()
    {   v = 3;
    }
private:
    int v;
}

void main() {
    auto c = new MyClass;
    void delegate () a = c.memberFunction; // Produces an error voids have no
value
}

What I think is appening is that DMD interprets c.memberFunction as a property call expression that it can then put into a delegate as a lazy evaluated expression.  Instead, what I would like it to do is that a points to a call of memberFunction on the object referenced by c.

Please tell me if you know an elegant way to do it.

Thanks
Simon Hudon
August 23, 2006
Simon Hudon wrote:
> 
> I have the following code:
> 
> class MyClass {
> public:
>     void memberFunction ()
>     {   v = 3;
>     }
> private:
>     int v;
> }
> 
> void main() {
>     auto c = new MyClass;
>     void delegate () a = c.memberFunction; // Produces an error voids have no
> value
> }
> 
> What I think is appening is that DMD interprets c.memberFunction as a property
> call expression that it can then put into a delegate as a lazy evaluated
> expression.  Instead, what I would like it to do is that a points to a call of
> memberFunction on the object referenced by c.
> 
> Please tell me if you know an elegant way to do it.
> 
> Thanks
> Simon Hudon


 void delegate () a = &c.memberFunction;