On Saturday, 2 February 2013 at 21:39:45 UTC, TommiT wrote:
I think we can use template mixins to achieve that:
mixin template add_stuff(alias var)
{
memberspace stuff
{
typeof(var) opCall() const
{
return var;
}
void opAssign(typeof(var) rhs)
{
var = rhs;
}
}
}
struct S
{
int _value;
mixin add_stuff!(_value);
}
void main()
{
S s;
s.stuff = 42;
assert(s.stuff() == 42);
}
And here's how you could even add the name of your memberspace as
one of the template mixin parameters:
mixin template basic_property(alias prop, alias var)
{
memberspace prop
{
typeof(var) opCall() const
{
return var;
}
void opAssign(typeof(var) rhs)
{
var = rhs;
}
}
}
struct S
{
int _value;
memberspace myprop { }
mixin basic_property!(myprop, _value);
}
void main()
{
S s;
s.myprop = 42;
assert(s.myprop() == 42);
}