| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
June 14, 2013 Error: cannot uniquely infer foreach argument types | ||||
|---|---|---|---|---|
| ||||
Hello, i'm trying to create a library with utilities classes like containers using Java API. Could anyone help me?
public interface Iterator(E) {
bool hasNext();
E next();
void remove();
int opApply(int delegate(ref E) delegation);
}
public class AbstractCollection(E) : Collection!E {
.....
E[] toArray(E[] dst = null) {
size_t count = size();
if( dst.length < count ) {
dst.length = count;
}
Iterator!E it = iterator();
foreach(int i,E e; it) { -> Error: cannot uniquely infer foreach argument types
dst[i] = e;
}
return dst[0 .. count];
}
.....
}
| ||||
June 14, 2013 Re: Error: cannot uniquely infer foreach argument types | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Agustin | Agustin: > Hello, i'm trying to create a library with utilities classes like containers using Java API. The problem with this is that most Phobos works with ranges... > Could anyone help me? Maybe your code has multiple problems. If you want a precise answer, then give a complete little program. But a possible problem is in the opApply: int opApply(int delegate(ref E) delegation); If you want to use: foreach (i, e; it) { Then you need to put both in the opApply (or add a second opApply overload), something like: int opApply(int delegate(ref int, ref E) delegation); Bye, bearophile | |||
June 14, 2013 Re: Error: cannot uniquely infer foreach argument types | ||||
|---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Friday, 14 June 2013 at 17:17:46 UTC, bearophile wrote:
> Agustin:
>
>> Hello, i'm trying to create a library with utilities classes like containers using Java API.
>
> The problem with this is that most Phobos works with ranges...
>
>
>> Could anyone help me?
>
> Maybe your code has multiple problems. If you want a precise answer, then give a complete little program. But a possible problem is in the opApply:
>
> int opApply(int delegate(ref E) delegation);
>
> If you want to use:
>
> foreach (i, e; it) {
>
> Then you need to put both in the opApply (or add a second opApply overload), something like:
>
> int opApply(int delegate(ref int, ref E) delegation);
>
> Bye,
> bearophile
int opApply(int delegate(ref int, ref E) delegation);
Works!, thanks.
| |||
June 14, 2013 Re: Error: cannot uniquely infer foreach argument types | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Agustin | On Fri, 14 Jun 2013 13:13:06 -0400, Agustin <agustin.l.alvarez@hotmail.com> wrote: > Hello, i'm trying to create a library with utilities classes like containers using Java API. Could anyone help me? > > public interface Iterator(E) { > bool hasNext(); > E next(); > void remove(); Here is the issue (as bearophile explained) > int opApply(int delegate(ref E) delegation); Also, you may want to try an already-created library that's similar to Java in some respects: http://schveiguy.github.io/dcollections/ -Steve | |||
June 15, 2013 Re: Error: cannot uniquely infer foreach argument types | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Agustin | On 06/14/2013 10:25 AM, Agustin wrote: > int opApply(int delegate(ref int, ref E) delegation); > > Works!, thanks. I have just completed the translation of the "foreach with Structs and Classes" chapter: http://ddili.org/ders/d.en/foreach_opapply.html Ali | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply