Can I make a variable public and readonly (outside where was declared) at same time?

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Sep 26 11:14:39 PDT 2014


On Friday, 26 September 2014 at 17:52:58 UTC, bearophile wrote:
> Marc Schütz:
>
>> Alternatively, you could create a union with a private and a 
>> public member with the same types, but I wouldn't recommend 
>> it. Besides, the members would need to have different names:
>>
>>    class Foo {
>>        union {
>>            private int a;
>>            public int b;
>>        }
>>    }
>
> You can call them a and a_. Why are you not recommending this 
> solution? It looks cool (if it works).

Don't know, it feels hacky. And I really don't like the two 
different names, what's the point if I have to distinguish the 
two manually?

Now yet another way came to my mind:

     struct PrivatelyWritableProperty(T) {
         private T value_;
         const(T) get() const { return value_; }
         private void opAssign(T value) { value_ = value; }
         alias get this;
     }

     class Foo {
         PrivatelyWritableProperty!int a;
     }

But this looks even more fragile; there are probably some 
corner-cases where it doesn't work (for example, what happens 
when someone copies the containing struct?).


More information about the Digitalmars-d-learn mailing list