Book Image

D Cookbook

By : Adam Ruppe
Book Image

D Cookbook

By: Adam Ruppe

Overview of this book

Table of Contents (21 chapters)
D Cookbook
Credits
Foreword
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

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:

  1. Use the inputRangeObject or outputRangeObject functions, passing an instance of any range to them.

  2. Store and use the returned object by using the InputRange!type or OutputRange!type interfaces. The type there is the type returned by front.

  3. 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.

  4. Remember...