sort using delegate as predicate

H. S. Teoh via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Sep 16 09:25:56 PDT 2014


On Tue, Sep 16, 2014 at 04:19:10PM +0000, via Digitalmars-d-learn wrote:
> The following code does not compile, because the custom predicate of
> std.algorithm.sort is a template parameter, and therefore can only be
> a function, but not a delegate.

What makes you think so? Template parameters certainly can be delegates.
I use that all the time.


> In C++, there is a variant of sort taking a function-object as a
> second (run-time) parameter, but phobos does not seems to have such a
> thing. It seems like a pretty common problem to me, so does anyone
> have a solution?
> 
> 
> 
> class Foo
> {
>   int[] order;
> 
>   bool cmp(int a, int b) const
>   {
>     return order[a] < order[b];
>   }
> }
> 
> void main()
> {
>   auto f = new Foo;
>   int[] data;
>   sort!(f.cmp)(data);
> }

Try this:

	sort!(&f.cmp)(data);

In D, writing `f.cmp` (without the &) can in some contexts be
misinterpreted as calling the function and passing the return value to
the template parameter, which is probably why you're getting a compile
error.


T

-- 
Why ask rhetorical questions? -- JC


More information about the Digitalmars-d-learn mailing list