On Thursday, 6 November 2014 at 09:13:07 UTC, Nordlöw wrote:
On Wednesday, 5 November 2014 at 21:29:20 UTC, Marc Schütz
wrote:
Again untested:
private alias makePredicate(alias xtr) =
(a, b) => (extractorFun!xtr(a) < extractorFun!xtr(b));
This errors as
sort_ex.d(35,43): Error: basic type expected, not (
sort_ex.d(35,43): Error: function declaration without return
type. (Note that constructors are always named 'this')
sort_ex.d(35,50): Error: semicolon expected to close alias
declaration
sort_ex.d(35,50): Error: Declaration expected, not '=>'
It probably needs to be spelled out as function/delegate literal
(sorry, don't have much time now).
auto sortBy(extractors..., R)(R r) {
alias preds = staticMap!(makePredicate, extractors);
return r.sort!preds;
}
and this as
sort_ex.d(37,6): Error: template sort_ex.sortBy(xtors..., R)(R
r) template tuple parameter must be last one
Try nesting the templates, then the tuple can come first:
template sortBy(extractors...) {
auto sortBy(R)(R r) {
// ...
}
}
This should then be usable as `sortBy!("x", "y")(range)`.