On 2/21/2015 4:31 PM, rumbu wrote:

My intention is not to have a read-only getter, I want to call SomeProp
on a const object:

class S
{
     private int cache = -1;
     private int SomeExpensiveOp() { return 12345; }

     public @property const(int) SomeProp()
     {
         if (cache = -1)
             cache = SomeExpensiveOp();
         return cache;
     }
}


const is transitive. If an instance of S is const, then all of its members are const, too. You cannot modify cache in that case. Assuming cache only needs to be initialized once, you can do this instead:

    this() { cache = SomeExpensiveOp(); }

    public @property const(int) SomeProp() const
    {
        return cache;
    }

Notice the const on the end of SomeProp. That makes the function callable on a const instance, but you still cannot modify cache inside of it.



Reply via email to