On 6/22/15 1:03 PM, Assembly wrote:
On Monday, 22 June 2015 at 16:52:15 UTC, Ali Çehreli wrote:
On 06/22/2015 09:37 AM, q66 wrote:

use opApply.

Yes. Additionally, an InputRange interface can be used:

  http://ddili.org/ders/d.en/foreach_opapply.html

Ali

I was reading exaclty this page that.

I've had implmented this method/properties (I remembered how foreach()
is translated to for() by the compiler using front/popFront() and such):

T front() { return _app.data[index]; }
T front(int index, T a) { return _app.data[index]; }


     void popFront()
     {
         index++;
     }


and called like this:

foreach(int i, MyType p; places) {

but I get this error:

Error: cannot infer argument types, expected 1 argument, not 2

to try solve that error I added the overload method:

T front(int index, T a)

but it didn't worked. How do I solve this?

TBH, opApply is much better suited to classes.

But in order to have multiple parameters with foreach by using a range, you must return a tuple:

auto front() { import std.typecons: tuple; return tuple(index, _app.data[index]);}

Note, do NOT do this on your class, you should be creating a range struct type, and return the range from opIndex() with no parameters.

-Steve

Reply via email to