Using runtime polymorphic (class) ranges
The std.range
module also provides interfaces for many of the range types. These are slower than using ranges with structs and templates directly, but have the advantage of using a single type for any object that matches the interface, This means that you can swap out the range implementation at runtime. It also has the advantage of providing a common application binary interface for cases such as class interfaces and building DLLs.
How to do it…
Let's make use of runtime polymorphic ranges by executing the following steps:
Use the
inputRangeObject
oroutputRangeObject
functions, passing an instance of any range to them.Store and use the returned object by using the
InputRange!type
orOutputRange!type
interfaces. The type there is the type returned byfront
.You can pass it to a function by using the element type and the interface, or
cast
it to a more specific range type (for example,cast(RandomAccessRange)
) if more capabilities are needed.Remember...