On Tuesday, 16 April 2013 at 14:57:11 UTC, Tofu Ninja wrote:
On Tuesday, 16 April 2013 at 14:33:21 UTC, John Colvin wrote:
A member function cannot modify it's own 'this' pointer.
However, a free function can do it happily, which when
combined with UFCS gives you the same syntax and behaviour:
class A {
//......
}
void replace(ref A a)
{
a = new A();
}
void main() {
A a = new A();
A b = a;
assert(b is a);
b.replace();
assert(!(b is a));
}
http://dpaste.dzfl.pl/147f69e1
Yes... this is what I feared. I knew I could do it like that
but I was hoping a more elegant solution was available, seems
like bad design to have a function that is fully intended to be
a class function but not actually be able to declare it within
the class block.
I would argue that it is better as a separate function.
Having a member function that reassigns 'this' seems a long way
from least-surprise (although with UFCS the user might be none
the wiser anyway).