On Sun, Jan 27, 2013 at 03:54:54AM +0100, Adam D. Ruppe wrote:
> It would be cool if we could declare variables with anonymous types;
> 
> struct { opAssign() {} } foo;

I was thinking we could just use a template to alleviate much of the
boilerplate of creating a property using a struct. For example,
something like:

        struct Property(T, alias setter, alias getter) {
                @property T get() {
                        return nullaryFunc!setter();
                }
                alias get this;

                void opAssign(T val) {
                        return unaryFunc!setter(val);
                }

                // ... add other standard stuff like opAssignOp, etc.
        }

Then you could use it like this:

        struct S {
                int x, y;
                Property!(int, ()=>x+y, (int z) { y=z-x; }) derivedProp;
        }

The syntax could do with some improvement, though. Maybe an alias:

        struct S {
                alias Property!(int, ()=>x+y, (int z) { y=z-x; }) DerivedProp;

                int x, y;
                DerivedProp derivedProp;
        }
        S s;
        s.derivedProp = 123;
        auto ptr = &s.derivedProp;
        writeln(*ptr);
        // etc.


T

-- 
Arise, you prisoners of Windows / Arise, you slaves of Redmond, Wash, /
The day and hour soon are coming / When all the IT folks say "Gosh!" /
It isn't from a clever lawsuit / That Windowsland will finally fall, /
But thousands writing open source code / Like mice who nibble through a
wall. -- The Linux-nationale by Greg Baker

Reply via email to