Overloading the assignment operator, right now!

Hasan Aljudy hasan.aljudy at gmail.com
Fri Sep 15 19:19:48 PDT 2006



Derek Parnell wrote:
> On Fri, 15 Sep 2006 09:57:53 +0200, Oskar Linde wrote:
> 
>> Georg Wrede wrote:
>>> Hasan Aljudy wrote:
>>>> Georg Wrede wrote:
>>>>
>>>>> Overloading of the assignment operator is not allowed in D.
>>>>>
>>>>> But no problem, we can do it right now, in spite of it.
>>>>>
>>>>> Just overload the opCatAssign operator instead, and use ~= where = 
>>>>> would be used.
>>>>>
>>>>> This way we might gather enough use cases to really know whether it 
>>>>> is good or bad in practice.
>>>> <snip>
>>>>
>>>> Why do you have to think in C++ when coding in D?
>>> I don't. Do you?
>>>
>>> Seriously, if you look back in the archives, I've been pretty voluminous 
>>> in my support of several ideas and opinions. Getting assignment operator 
>>> overload hasn't been one of them.
>>>
>>> Then again, some other people have really wanted it, and I stumbled on a 
>>> method to try it out with, which I wrote here. Now they can try it out, 
>>> without Walter having to make changes to the language.
>> There is more to it than having an operator to overload. You want to be 
>> able to overload both assignment and copying.
>>
>> Given
>>
>> struct T { ... opCatAssign(T t) {...} }
>> void func(T t) {...}
>> T a,b;
>>
>> You take care of
>>
>> 	a ~= b;
> 
>   Yes, with  'a.opCatAssign(b);'
>  
>> but not
>>
>> 	func(b);
>>
>> where a copy is created too.
> 
> Are you saying that a simple struct reference in a function call just does
> a shallow copy of the struct, but that sometimes you might need to do a
> deep copy instead?
> 
> What about ...
> 
>   func( T x := b);
> 
> assuming for the sake of this example that ':=' is the (deep) copy
> operator?
> 

I vote:
No for copy operators.
Specially no for the ugly and cumbersome-to-type := operator.

Yes for auto-generated copy methods/properties. (both deep and shallow)

T x = b.dup.deep;
T y = b.dup.shallow;



More information about the Digitalmars-d mailing list