On Thursday, 21 April 2016 at 17:27:09 UTC, Alex wrote:
Ok. So, does this mean, that they just allocate on creation/binding them? If so, there is no problem and there are no questions any more.

Just like classes - when closure expression is executed.

I have an unusual caption... On creation I capture an immutable id for my delegates, which are stored in an array. Indeed, the id of the delegate is just the position of it in its array. Then, I call my delegate as a function with a parameter, depending on it, the call is delegated to another objects (with the stored id, of course :) ) Another possibility, which I could imagine is: not to store the id and let the delegate calculate it by some pointer arithmetic from the array wherein it is stored. Then, no independent data would be stored at all. This would assume however, that different function pointers won't be merged, although the one and only distinction between them would be the fact of storing them at different array indices.

Instead of using a delegate you can use a Struct with opCall. Pass what you want to copy to the struct by using a constructor and put your function code in opCall method.

An example here:

https://github.com/QAston/transducers-dlang/blob/master/source/transduced/transducers.d#L797

you can see there various variants of doing the same operation, using closure, function and struct.


Reply via email to