Why does map take lambda as a template parameter

Lass Safin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Apr 23 13:36:05 PDT 2016


On Saturday, 23 April 2016 at 20:06:39 UTC, xtreak wrote:
> map takes lambda as a template parameter and so does filter and 
> many other functions. Sometimes they take something other than 
> lambda as a template parameter. Eg. In case of to!int("5") int 
> is a type and hence might need it as a template parameter but 
> why does map and others take it as template parameter.
>
> Adam D Ruppe pointed out in IRC it helps in inlining and 
> optimization. Is there a thumb rule to decide this so that my 
> functions too can benefit the performance and hence I could 
> structure and understand my code better.

Non-template function parameters can not be inlined, since 
they're not determinable at compile-time, only at run-time.
You can have two versions if you want, one with the function as a 
template parameter, and one with it as a function pointer.

I don't really think there is a rule of thumb to it other than 
using templates when you desire performance and also nicer syntax 
(in my opinion).

Templates also use up more space in the executable by the way, so 
if you're developing on a platform with very limited memory, then 
function pointers may be the better alternative.


More information about the Digitalmars-d-learn mailing list