Primary Ranges of Containers

Timon Gehr timon.gehr at gmx.ch
Tue Jun 19 07:04:54 PDT 2012


On 06/19/2012 02:54 PM, Christophe Travert wrote:
> Jonathan M Davis , dans le message (digitalmars.D:170054), a écrit :
>>> I'd propose to always add a bool template parameter (maybe isConst?) to
>>> the range since most of the write-functionality can be "removed" by a
>>> static if statement in order to make the range read-only.
>>>
>>> Any suggestions?
>
> Boolean parameters are very obscure.
> How do you guess what is the meaning of false in:
> Range!false;
>
> Range!IsConst.no would be better.
>
>> struct ArrayRange(bool isConst) {...}
>> alias ArrayRange!false Range;
>> alias ArrayRange!true ConstRange;
>
> Range and ConstRange seems a good thing to have, just like c++
> containers have iterator and const_iterator.
>

Something along these lines seems to be a superior design:

struct ArrayRange(T){ ... }

class Array(T){
     ...
     ArrayRange!T opSlice(){ ... }
     ArrayRange!(const(T)) opSlice()const{ ... }
     ArrayRange!(immutable(T)) opSlice()immutable{ ... }
     ...
}

(Where the opSlice functions can be generated automatically.)


More information about the Digitalmars-d mailing list