Passing functions as template parameter and assigning default values to them
biozic via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jun 21 03:06:12 PDT 2015
On Sunday, 21 June 2015 at 09:34:51 UTC, kerdemdemir wrote:
> Hi,
>
> I need to find the index of maximum element so my code:
>
> int indexOfMax(R)(R range)
> {
> alias Type = typeof(range.front().re); ----> I don't like
> .re here
> Type max = 0;
> size_t maxIndex = 0;
> foreach ( index,elem; range )
> {
> if ( elem.re > max ) -----> And also here
> {
> max = elem.re;
> maxIndex = index;
> }
> }
> return maxIndex;
> }
>
> Since my range contains Complex!double types I have to add
> ".re" for current implementation. But I want to be more
> generic. Like how std.algorithm.map is.
> Like: range.map!(a => a.re).
>
> So what I want to achive is :
>
> indexOfMax!(a => a.re)(complexRange); ----> implement algorithm
> on a.re
> indexOfMax(intRange); -----> if a function is not given act
> like (a => a)
>
> Any advice with template function parameters or mixins will
> make me happy.
>
> Regards
> Erdem
You can use a template alias parameter with a default value that
is your default lambda:
int indexOfMax(alias fun = a => a, R)(R range)
{
// Use `fun` here like a function.
}
-- Nico
More information about the Digitalmars-d-learn
mailing list