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.