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)`.

Reply via email to