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.

Reply via email to