On Fri, Jan 05, 2024 at 08:41:53PM +0000, Noé Falzon via Digitalmars-d-learn 
wrote:
> On the subject of `map` taking the function as template parameter, I
> was surprised to see it could still be used with functions determined
> at runtime, even closures, etc. I am trying to understand the
> mechanism behind it.

That's simple, if the argument is a runtime function, it is treated as a
function pointer (or delegate).


[...]
> In fact, how can the template be instantiated at all in the following
> example, where no functions can possibly be known at compile time:
> 
> ```
> auto do_random_map(int delegate(int)[] funcs, int[] values)
> {
>       auto func = funcs.choice;
>       return values.map!func;
> }
> ```
[...]

The argument is taken to be a delegate to be bound at runtime. In the
instantiation a shim is inserted to pass along the delegate from the
caller's context.


T

-- 
Creativity is not an excuse for sloppiness.

Reply via email to