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?).