1. Define opApply (see section labeled "Foreach over Structs and Classes with opApply after here: http://dlang.org/statement.html#foreach_with_ranges)

2. Or make it a range (see http://dlang.org/statement.html#foreach_with_ranges and http://ddili.org/ders/d.en/ranges.html ), which would probably be a bad
idea, since containers really shouldn't be ranges.

3. Or do what std.container does and overload opSlice which returns a range over the container (see http://dlang.org/operatoroverloading.html#Slice and http://dlang.org/phobos/std_container.html in addition to the links in #2).
Overall, this is the best approach.

But regardless of which approach you take, you really should read up on ranges
if you want to be doing much with D's standard library, and
http://ddili.org/ders/d.en/ranges.html is the best tutorial on them at this point. There's also this recent article by Walter Bright which explains one of
the main rationales behind ranges:

http://www.drdobbs.com/architecture-and-design/component-programming-in-
d/240008321

- Jonathan M Davis

Awesome thanks Jonathan! I've read that guide on ranges before and they sound very interesting. I'm currently playing with recursive collections and opApply works great.

Reply via email to