On Thursday, 6 March 2014 at 22:16:50 UTC, Steven Schveighoffer wrote:
On Thu, 06 Mar 2014 17:05:12 -0500, captain_fid <[email protected]> wrote:

On Thursday, 6 March 2014 at 21:26:11 UTC, Ali Çehreli wrote:
On 03/06/2014 12:02 PM, Steven Schveighoffer wrote:

> The best way
> to reference an array in a child class, especially one of a
static type,
> is to not have another copy in the child class :)

Agreed. Alternatively, a member function in the child class could return a slice.

Ali

Steve, thanks for the link and the nicely written article. Also for the assessment on pointer syntax, I'd love to avoid if possible (especially w/ limitations you noted).

I had been spending time over at http://dlang.org/arrays.html and had forgotten (or never understood) dynamic arrays were passed by slices. That link only talks about passing static arrays (IIRC). Keeping track of 'what being passed how' is tough for this programmer.

Your suggestion Ali (of not accessing the base member in the child was great) and it works properly.

Believe if I understand what you are suggesting above is never to have the array in base? simply retrieve slice through the child member function?

I think what Ali means is:

class A
{
   abstract S[] items();
}

class B : A
{
   S[] _items = [ {10, "first"}, {20, "second"}];
   override S[] items() { return _items;}
}

What I was saying is, if you know the items are going to be stored in the object, just store them in the base:

class A
{
    S[] items;
}

class B : A
{
    this() {items = [ {10, "first"}, {20, "second"}];}
}

This way, both the derived and the base will always see the same items, and you only store it in the object once. Obviously if you store the items elsewhere in some derivatives, Ali's idea is preferable.

-Steve

Yes Steve!

Even if the title of the thread is off, the original intent was what you've shown. For a reason (probably duplicate definitions in base and child) I would end up with items in B and not visible in A.

I didn't understand the syntax for performing the above.

I owe you guys a beer (or something). Definitely a learning lesson.

Reply via email to