Thread overview
Extra Array Operator Overloading Request
May 30, 2007
Johan Granberg
May 30, 2007
Frits van Bommel
May 30, 2007
Johan Granberg
May 30, 2007
Frits van Bommel
May 30, 2007
I do a lot of matrix calculations with a D library that I have written and it would be really nice to be able to overload a few more array operators, like assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this feature been approved, discussed, or planned?
Thanks,
JC
May 30, 2007
Jonathan Crapuchettes wrote:

> I do a lot of matrix calculations with a D library that I have written and it would be really nice to be able to overload a few more array operators, like assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this feature been approved, discussed, or planned? Thanks, JC

What is preventing you from doing so now? if opIndex returns a type that overloads opAddAssign your example should be possible right now.
May 30, 2007
Johan Granberg wrote:
> Jonathan Crapuchettes wrote:
> 
>> I do a lot of matrix calculations with a D library that I have written and
>> it would be really nice to be able to overload a few more array operators,
>> like assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this
>> feature been approved, discussed, or planned? Thanks, JC
> 
> What is preventing you from doing so now? if opIndex returns a type that
> overloads opAddAssign your example should be possible right now.

Typically, if you have a matrix of T you'd want to have mat[i,j] (or mat[i][j]) return either a T or something that implicitly converts to one. Since you can only overload operators on aggregates (class, struct, union) but can't define implicit conversions for them...
May 30, 2007
Frits van Bommel wrote:

> Johan Granberg wrote:
>> Jonathan Crapuchettes wrote:
>> 
>>> I do a lot of matrix calculations with a D library that I have written
>>> and it would be really nice to be able to overload a few more array
>>> operators,
>>> like assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this
>>> feature been approved, discussed, or planned? Thanks, JC
>> 
>> What is preventing you from doing so now? if opIndex returns a type that overloads opAddAssign your example should be possible right now.
> 
> Typically, if you have a matrix of T you'd want to have mat[i,j] (or mat[i][j]) return either a T or something that implicitly converts to one. Since you can only overload operators on aggregates (class, struct, union) but can't define implicit conversions for them...

But if T supports both opIndex and opAssign that wouldn't be a problem, right?
May 30, 2007
Johan Granberg wrote:
> Frits van Bommel wrote:
> 
>> Johan Granberg wrote:
>>> Jonathan Crapuchettes wrote:
>>>
>>>> I do a lot of matrix calculations with a D library that I have written
>>>> and it would be really nice to be able to overload a few more array
>>>> operators,
>>>> like assigned multiplication (i.e. mat1[i,j] += mat2[i,j];).  Has this
>>>> feature been approved, discussed, or planned? Thanks, JC
>>> What is preventing you from doing so now? if opIndex returns a type that
>>> overloads opAddAssign your example should be possible right now.
>> Typically, if you have a matrix of T you'd want to have mat[i,j] (or
>> mat[i][j]) return either a T or something that implicitly converts to
>> one. Since you can only overload operators on aggregates (class, struct,
>> union) but can't define implicit conversions for them...
> 
> But if T supports both opIndex and opAssign that wouldn't be a problem,
> right?

(Presumably you mean opAddAssign instead of opIndex?)

Only if T is a struct or union[1], and its author was aware of the need to put it in that particular Matrix implementation (or you're willing to modify it to fit[2]).
If it's a primitive type like (int, float, cfloat) and variants, or a class (hint: opAssign can't modify the reference) you're screwed.


[1]: Requirements: value type with possibility of operator overloading.
[2]: Hopefully by way of a mixin, since there's a lot of op<X>Assign operators.