How to iterate using foreach on a class?

simendsjo simendsjo at gmail.com
Fri Nov 1 05:37:18 PDT 2013


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

So we basically have 4 ways..?
1) popFront + front
2) opSlice
3) alias this
4) opApply


More information about the Digitalmars-d-learn mailing list