30-Jan-2013 21:02, Zach the Mystic пишет:
On Wednesday, 30 January 2013 at 06:46:01 UTC, H. S. Teoh wrote:
That page only states the structs nested inside *functions* have a
context pointer to the function's local variables. It says nothing about
structs nested inside *structs*. (And yes, I looked. I was actually in
the middle of writing something about using structs to simulate
properties, and decided to look it up to be sure, and found that the
spec actually doesn't say what I thought it said.)
T
Okay, cool. Two questions remain: 1) How hard to implement structs
nested in structs to mimic ones nested in functions?
IMO if property is to be implemented in the library it has to include
the field itself. (And I suspect properties should enjoy compiler support).
Then something like:
struct A{
Property!(int, filter, getter) prop;
private:
void func()
{
...
prop.raw = xxx; //direct write
prop = yyy; //goes through setter
}
}
where .raw is the field itself and there must be a way to let only
struct itself have access to it. I have one method to get this but I
don't like it - put this in each module:
mixin PropertyForModule!(my_module);
introducing a Property template in this module, with private .raw
accessible thusly only in this module.
Getter is then just any function that maps T => T, with x => x by
default so can be omitted.
Filter is something new but in essence it works like the following setter:
void setter(T)(ref T val, T newVal)
{
val = filter(newVal); //filter may through
}
It's a bit more restrictive though so feel free to destroy.
2) How much code
breakage?
A lot + subtly wasting memory.
--
Dmitry Olshansky