I'll come back with a more complete answer latter, but first.

spir Wrote:

> * I wrote Range as class, but I rather meant an interface. D does not let me 
> do that, apparently because there is no data slot in a D interface. Is then 
> an interface a kind of data-less superclass? Or is there something I 
> misunderstand?

Interfaces describe what can something of that type can do, not what it has. 
Data fields are not allowed only function signatures and functions that perform 
local modifications.

>       auto range = ...;
>       while (range.continues) {
>               doSomethingWith(range.element);
>               range.step();
>       }

Note that you are not actually using a Range as it is defined by D. In fact it 
is exactly the same, but named differently, here is what D's range interface 
looks like.


>       auto range = ...;
>       while (!range.empty) {
>               doSomethingWith(range.front);
>               range.popFront();
>       }

Reply via email to