Re: Passing functions as template parameter and assigning default values to them

2015-06-21 Thread kerdemdemir via Digitalmars-d-learn

On Sunday, 21 June 2015 at 10:06:15 UTC, biozic wrote:
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


Thanks a lot, it works !!


Re: Passing functions as template parameter and assigning default values to them

2015-06-21 Thread biozic via Digitalmars-d-learn

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



Passing functions as template parameter and assigning default values to them

2015-06-21 Thread kerdemdemir via Digitalmars-d-learn

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