digitalmars.D - One more problem with operator overloading
- Ivan Senji (34/34) Jun 25 2004 :(
- Norbert Nemec (23/66) Jun 25 2004 Did you try to use opSlice instead? Up to now, the [] was not an indexin...
- Ivan Senji (9/31) Jun 25 2004 Yes, it is not possible beacuse i get a message something like Array[] i...
:(
The thing i was writing is an Array template, to be exact its
specialisation for a one dimensional array.
The idea was to give Array all functionallity of normal arrays
+ more.
With normal arrays i can do:
int[] numbers = new int[10];
numbers[] = 3;
//and assign 3 to all elements!
So i thought it would be possible too for a class.
Array!(int,1) A1 = new Array!(int,1)(10);
A1[] = 3;
To achieve this i overloaded
int opIndexAssign(int value)
{
//here i assigne value to all elements of the
//internal array
}
But this doesn't work! The error from compiler
is: Array cannot be sliced with []!
But i am not trying to do slicing, but a indexAssign
with no index!
Ofcourse if there was opAssign i could use that.
But i thought that this way with opIndexAssign(int value)
is even nicer.
Does it make sence that you can create:
opIndexAssign(int value,...);
and use it
A1[1,2,3,4,5,6,7,8,9,0,1,2,3] = 3;
But you can't create
opIndexAssign(int value); ?
I know that the spec says opIndexAssign takes
two arguments but can this be changed so it can
take only one?
Jun 25 2004
Did you try to use opSlice instead? Up to now, the [] was not an indexing
but a slicing operator. Now, with multidimensional indexing operators, one
could argue in favor of a zero-dimensional indexing operator, but I see
little difference between defining a function
opIndexAssign(value)
or
opSliceAssign(value)
B.t.w: is there a opSliceAssign at all? Now, that we have multidimensional
indexing, we should really think about multidimensional slicing operators
at well. I have no good idea how to do it, though:
* It should be flexible enough to leave room for strides, since I really
hope that strided slicing gets into the language some day.
* It should allow mixing indices and slices like in A[3,4..5,6]
Maybe, instead of extending opSlice, we could make 4..5 an expression
returning a
struct range(int) {
int min;
int max;
}
But then, that struct would have to be defined in the language specs, which
would be somewhat awkward.
Any ideas?
Ivan Senji wrote:
:(
The thing i was writing is an Array template, to be exact its
specialisation for a one dimensional array.
The idea was to give Array all functionallity of normal arrays
+ more.
With normal arrays i can do:
int[] numbers = new int[10];
numbers[] = 3;
//and assign 3 to all elements!
So i thought it would be possible too for a class.
Array!(int,1) A1 = new Array!(int,1)(10);
A1[] = 3;
To achieve this i overloaded
int opIndexAssign(int value)
{
//here i assigne value to all elements of the
//internal array
}
But this doesn't work! The error from compiler
is: Array cannot be sliced with []!
But i am not trying to do slicing, but a indexAssign
with no index!
Ofcourse if there was opAssign i could use that.
But i thought that this way with opIndexAssign(int value)
is even nicer.
Does it make sence that you can create:
opIndexAssign(int value,...);
and use it
A1[1,2,3,4,5,6,7,8,9,0,1,2,3] = 3;
But you can't create
opIndexAssign(int value); ?
I know that the spec says opIndexAssign takes
two arguments but can this be changed so it can
take only one?
Jun 25 2004
"Norbert Nemec" <Norbert.Nemec gmx.de> wrote in message news:cbgk9f$11ba$1 digitaldaemon.com...Did you try to use opSlice instead? Up to now, the [] was not an indexing but a slicing operator. Now, with multidimensional indexing operators, one could argue in favor of a zero-dimensional indexing operator, but I see little difference between defining a functionYes, it is not possible beacuse i get a message something like Array[] is not an lvalue. Zero dimensional operator would be great, but opSliceAssign would be a solution too!opIndexAssign(value) or opSliceAssign(value) B.t.w: is there a opSliceAssign at all? Now, that we have multidimensional indexing, we should really think about multidimensional slicing operators at well. I have no good idea how to do it, though:No there is no opSliceAssign :(* It should be flexible enough to leave room for strides, since I really hope that strided slicing gets into the language some day. * It should allow mixing indices and slices like in A[3,4..5,6] Maybe, instead of extending opSlice, we could make 4..5 an expression returning a struct range(int) { int min; int max; } But then, that struct would have to be defined in the language specs,whichwould be somewhat awkward. Any ideas?No ideas yet. Except that your * and * would be great :)
Jun 25 2004








"Ivan Senji" <ivan.senji public.srce.hr>