On Friday, 1 November 2013 at 11:41:52 UTC, Jonathan M Davis wrote:
On Friday, November 01, 2013 12:30:10 Gary Willoughby wrote:
I have a class which contains an array as a core collection of
data. I want to pass an instance of this class to a foreach loop
and iterate through the enclosed array. How do i do this? I've
asked this before and got an answer but i can't find anything now.

In general, if you want to make something work with foreach, you either make it a range, or you give it an opSlice which returns a range (another alternative would be define opApply, but in general, code should be using the range primitives rather than opApply). Given that you're looking to iterate an array, and you presumably don't want the array to be consumed when iterating, the simplest would be to simply declare an opSlice on the class returns the
array. e.g.

class C
{
    int[] foo;
    auto opSlice() { return foo; }
}

Then when you use the class in a foreach loop, it'll be sliced, and the return value of opSlice (the array in this case) will then be iterated over.

- Jonathan M Davis

Hmmm, that's simpler too. ta.

Reply via email to