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