Question about overloading opSlice(3,4)

Stewart Gordon smjg_1998 at yahoo.com
Fri Aug 18 11:02:32 PDT 2006


nobody wrote:
> Overloading Slicing a[] and a[i .. j]
> http://digitalmars.com/d/operatoroverloading.html
> 
> Suppse I have the following:
> 
>   struct ByteArray // just bytes
>   {
>     byte[] b;
>   }
> 
> Now suppose I want to (not want, must) overload opSlice. Now I have to 
> deal with things like:
> 
>   ByteArray bArr;
>   short[]   sArr; // assume it holds data
>   int[]     iArr; // assume it holds data
> 
>    bArr = sArr[];       // bArr.opSlice()
>    bArr = iArr[];       // bArr.opSlice()
>    bArr = sArr[0 .. 1]; // bArr.opSlice(0,2)
>    bArr = iArr[0 .. 1]; // bArr.opSlice(0,4)

No such thing as bArr.opSlice factors into your code.

> As I understand opSlice bArr should point to data inside either sArr or 
> iArr after any of these slices. But bArr is called via opSlice() or 
> opSlice(i,j).
> So how does one do that if one gets no information about sArr or iArr?

What do you mean by "bArr is called"?

You appear to be trying to overload the assignment operator.  D doesn't 
let you do this, for good reasons.  However, you can enable stuff like

     bArr[] = sArr[0 .. 1];
     bArr[0..4] = iArr[0 .. 1];

by defining bArr.opSliceAssign.

Stewart.



More information about the Digitalmars-d-learn mailing list