Idiomatic way to process const/immutable arrays as ranges

Steven Schveighoffer schveiguy at yahoo.com
Mon Feb 11 07:06:26 PST 2013


On Mon, 11 Feb 2013 09:46:54 -0500, Dicebot <m.strashun at gmail.com> wrote:

> This question is so stupid I am just struck with trying to chose the  
> "good" solution.
>
> Consider this code:
>
> string func(in string[] args)
> {
>      return args.join(" "); // compile error, args is not an input range
> }
>
> It is somewhat expected as you can hardly popFront on a const range. But  
> then question is: how can I wrap const slice into a mutable range  
> without copying data (using standard language/library solution)? Of  
> course, I can do .dup.join, but there is no real need to do copy, even a  
> shallow one.

What you are looking for is a tail-const array:

string func(const(string)[] args)

This will allow traversal, and not allow modification of the elements.

-Steve


More information about the Digitalmars-d-learn mailing list