On Fri, 26 Aug 2011 20:24:43 +0200, Mafi wrote: > The algorithms in std.algorithm are great. They operate the same on > arrays/slices and generic ranges. But they return their own range-types. > Often this ok but sometimes you need a T[].
I have a feeling that std.range.inputRangeObject() will be helpful here. It provides a polymorphic interface to different types of ranges. It returns an InputRangeObject(R), but don't let its name give the wrong impression: it can be used as any non-OutputRange :), as long as the range R supports that interface. Say, the element type is int and the range is a ForwardRange. Then you can have ForwardRange!int r = inputRangeObject(my_range_returning_algo()); Or, when you don't need the ForwardRange functionality, you can specify another type on the left hand side: InputRange!int r = inputRangeObject(my_range_returning_algo()); (You must specify the type explicitly.) Then you can have arrays of interfaces to these actually unrelated ranges: InputRange!int[] my_input_ranges; my_input_ranges ~= inputRangeObject(foo_algo()); my_input_ranges ~= inputRangeObject(bar_algo()); (Not tested. Type casting may be needed on the right hand sides as well.) Ali