PROPOSAL: Operator overloading by static member function

Daniel Keep daniel.keep.lists at gmail.com
Sat Oct 13 20:37:36 PDT 2007



oldrev wrote:
> Daniel Keep Wrote:
> 
>>
>> oldrev wrote:
>>> It's a simple way to avoid using the ugly "opAdd_r", eg:
>>>
>>> struct Currency
>>> {
>>>   private int m_value;
>>>
>>>   public static Currency opAdd(Currency lhs, Currency rhs) {
>>>     return Currency(lhs.m_value + rhs.m_value);
>>>   }
>>> }
>> And how are you going to overload static opAdd_r, then?
>>
>> I really don't see any need for this; opAdd_r is perfectly fine.
>>
>> 	-- Daniel
> 
> We do not need opAdd_r anymore, it will be overloaded by static opAdd.
> 
> static A opAdd(A a, int i);
> static A opAdd(int i, A a);
> 
> a+100 // it equals to opAdd(a, 100);
> 100+a //opAdd(100, a)
> 
> Regards,
> - oldrev

You didn't answer the first question.  You haven't said how we're going
to do this:

struct Meters
{
    real value;
}

struct m
{
    static Meters opMul_r(real value)
    {
        return Meters(value);
    }
}

auto distance = 20*m;

In your system, there's no way to have that since you can't have type
arguments.  And *yes*, there are people who use this kind of thing.

Also, as Nathan pointed out, this would break basically *all* code that
overloads any operators and for what?  So we don't have to type "_r" and
can no longer have static operator overloads?

	-- Daniel



More information about the Digitalmars-d mailing list