Defining inout returned values for ranges

Jonathan Crapuchettes jcrapuchettes at gmail.com
Fri Sep 6 13:01:25 PDT 2013


On Thu, 05 Sep 2013 23:32:10 +0200, anonymous wrote:

> On Thursday, 5 September 2013 at 19:19:42 UTC, Jonathan Crapuchettes
> wrote:
>> On Wed, 04 Sep 2013 11:49:41 +0200, anonymous wrote:
> [...]
>>> You can use a Template This Parameter [1] instead of inout:
>>> ----
>>>     auto opSlice(this This)()
>>>     {
>>>         static if(is(This == const)) alias QualifiedT = const
>>> T;
>>>         else alias QualifiedT = T;
>>> 
>>>         static struct Range {
>>>             QualifiedT front() @property {
>>> ----
>>> 
>>> [1] http://dlang.org/template.html#TemplateThisParameter
>>
>> Thank you for the help. That worked, but now I ran into another similar
>> issue. What if the Range struct is being defined outside of the opSlice
>> method? I have a number of methods in a struct that return the same
>> range type and would rather not have to have duplicate code or need to
>> use mixins.
>>
>> JC
> 
> Templatize Range and pass it This:
> ----
>     static struct Range(This)
>     {
>         static if(is(This == const)) alias QualifiedT = const T;
>         else alias QualifiedT = T;
> 
>         QualifiedT front() @property {...}
>     }
> 
>     auto opSlice(this This)()
>     {
>         return Range!This();
>     }
> 
>     ... more methods in the style of opSlice ...
> ----
> 
> If you need QualifiedT in opSlice, make it a template over This,
> too.

Thank you again. It all appears to be working correctly.

JC


More information about the Digitalmars-d-learn mailing list