Andrej Mitrovic <andrej.mitrov...@gmail.com> wrote:
On 1/31/11, Simen kjaeraas <simen.kja...@gmail.com> wrote:
module foo;
import std.typecons;
import std.functional;
import std.array;
template optArg( alias pred ) {
template optArg( alias fn ) {
auto optArg( Range )( Range r ) {
alias binaryFun!pred predicate;
alias unaryFun!fn func;
auto result = tuple( r.front, func( r.front ) );
foreach ( e; r ) {
auto tmp = func( e );
if ( predicate( e, result[1] ) ) {
result = tuple( e, tmp );
}
}
return result;
}
}
}
void main( ) {
alias optArg!"a<b" minArg;
alias minArg!"a" foo;
assert( foo( [5,2,1,3] ) == tuple(1,1) );
}
Damn! That's pretty nice, I didn't know we could nest with the
eponymous trick. This could be quite useful, thanks.
You can only do that using aliases.
--
Simen