www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Why does map take lambda as a template parameter

reply xtreak <tir.karthi gmail.com> writes:
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.
Apr 23 2016
parent Lass Safin <lasssafin gmail.com> writes:
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.
Apr 23 2016