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

Reply via email to