On Sunday, 27 January 2013 at 01:11:05 UTC, H. S. Teoh wrote:
On Sun, Jan 27, 2013 at 01:15:29AM +0100, Rob T wrote:
We can almost implement properties as a regular struct
[...]
You do it like this:
import std.stdio;
struct IntProp {
int __impl;
@property /* <-- ah, the irony! */ int value() {
return __impl + 123;
}
alias value this; // watch this magic
void opAssign(int val) {
__impl = val - 123;
}
}
struct S {
IntProp prop;
}
void main() {
S s;
writeln(s.prop);
s.prop = 321;
writeln(s.prop);
}
T
Ah cool! You don't really need @property however if we adopt the
optional () unless that's to be enforced.
The really nice thing about this, is we can return the struct as
a ref, and it still works, and also take the address of the
struct and it continues to work.
Even better I can add more member functions to it and expand on
what it can do. The "property as a function" approach is far more
limiting and has issues, such as ref returns and taking the
address.
Anyone know what's missing or what won't work with this approach?
--rt