In gtkD one can use a lambda directly:

    X.addOnButtonPress((GdkEventButton* e, Widget w) ...

but if I try move the lambda in to a variable so I can use it with multiple handlers, I get an error:

    // x is a function and does not work
    auto x = (GdkEventButton* e, Widget w) ...
    X.addOnButtonPress(x);

etc...

It's because the second case treats x as a function while the first it is a delegate and addOnButtonPress requires a delegate...

Why is x not a delegate?

Now, if I reference a variable outside the scope of the lambda it turns magically in to a delegate and works!

But that is an ugly hack!

// now x is a delegate and works
auto x = (GdkEventButton* e, Widget w) { auto q = X; ...


Now sure I can hack x and use some template to turn it in to a fake delegate but then that is dangerous.

I suppose one could have a template that only converts it if it is a function and then that will deal with both cases and might work...

But why?
Is there any way to force it to not reduce the delegate to a function which is obviously an optimization when nothing accesses the outside context.






                        

Reply via email to