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