| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
May 30, 2007 Extra Array Operator Overloading Request | ||||
|---|---|---|---|---|
| ||||
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 Re: Extra Array Operator Overloading Request | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Jonathan Crapuchettes | 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 Re: Extra Array Operator Overloading Request | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Johan Granberg | 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 Re: Extra Array Operator Overloading Request | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Frits van Bommel | 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 Re: Extra Array Operator Overloading Request | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Johan Granberg | 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.
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply