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