Ref and class function calls?

Regan Heath regan at netmail.co.nz
Tue Apr 16 08:23:50 PDT 2013


On Tue, 16 Apr 2013 15:57:09 +0100, Tofu Ninja <emmons0 at purdue.edu> 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 question always question "fully intended" on a case by case basis:
http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197

I agree that grouping functions together that should be used together, or  
on the same type of object is a good idea from an organisational point of  
view but that shouldn't be the only reason for making them class member  
functions.

R

-- 
Using Opera's revolutionary email client: http://www.opera.com/mail/


More information about the Digitalmars-d-learn mailing list